Удалить из списка все элементы, меньше заданного 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.