Удалить из списка все элементы, меньше заданного x - Lisp
Формулировка задачи:
(defun DEL (A X) (if X (if (equal (car X) A) (DEL A (cdr X)) (cons (car X) (DEL A (cdr X))))))
(loop for i from -10 to 10 by 3 maximize (+ (* (expt (* 0.2 i) 3) 3) (* 4 x)))
Решение задачи: «Удалить из списка все элементы, меньше заданного x»
(defun drop-less (n w) (labels ((drop (n w ac &aux (a (car w))) (if w (drop n (cdr w) (if (< a n) ac (cons a ac))) (nreverse ac)))) (drop n w nil))) > (drop-less 10 '(7 8 9 10 11)) (10 11)
Объяснение кода листинга программы
В коде представлена функция drop-less
, которая принимает два аргумента: n
и w
.
Список w
передаётся в функцию drop
, которая принимает три аргумента: n
, w
и ac
. В функции drop
создаётся новая переменная a
, которая содержит первый элемент списка w
. Затем проверяется, есть ли ещё элементы в списке w
. Если есть, то функция drop
вызывается рекурсивно с аргументами n
и cdr w
, где cdr w
— это список, полученный путём удаления первого элемента из w
. Если значение a
меньше n
, то в список ac
добавляется значение a
. Если значение a
больше или равно n
, то в список ac
добавляется список ac
в обратном порядке.
В конце функция drop-less
вызывается с аргументами n
и w
для получения результата. Результатом работы функции является список, содержащий только элементы, большие заданного значения n
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д