Почему не считает количество элементов списка x, не превосходящих элемент а? - Lisp
Формулировка задачи:
Почему не считает количество элементов списка x не превосходящих элемент а.И как изменить код что бы начал считать?
(defun f (a x)
(if (< (car x) a) (+ 1) (+ 0))
(if (< (cadr x) a) (+ 1) (+ 0))
(if (< (caddr x) a) (+ 1) (+ 0)))Решение задачи: «Почему не считает количество элементов списка x, не превосходящих элемент а?»
textual
Листинг программы
(defun f (a x) (if (< (car x) a) (+ 1) (+ 0)) (if (< (cadr x) a) (+ 1) (+ 0)) (if (< (caddr x) a) (+ 1) (+ 0)))
Объяснение кода листинга программы
В данном коде определен функтор f, который принимает два аргумента — a и x.
Список выполняется следующим образом:
(if (< (car x) a) (+ 1) (+ 0))- Если первый элемент списка
xменьшеa, то возвращается1, иначе0. - Это условие не изменяет значение
x, поэтому оно не влияет на дальнейший расчет.
- Если первый элемент списка
(if (< (cadr x) a) (+ 1) (+ 0))- Если второй элемент списка
xменьшеa, то возвращается1, иначе0. - Это условие также не изменяет значение
x, поэтому оно не влияет на дальнейший расчет.
- Если второй элемент списка
(if (< (caddr x) a) (+ 1) (+ 0))- Если третий элемент списка
xменьшеa, то возвращается1, иначе0. - Это условие также не изменяет значение
x, поэтому оно не влияет на дальнейший расчет. Поскольку список состоит только из трех элементов, то выполняются все три условия. Таким образом, функцияfвсегда возвращает1. Таким образом, данный код считает количество элементов спискаx, которые меньшеa.
- Если третий элемент списка