Удалить из списка все элементы, меньше заданного x - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите решить задачи почти готовые 1.Удалить из списка все элементы, меньше заданного x. Например: дано (3 6 8 3 5 6), x=6, получить (3 3 5) вроде подобное что-то нашел, но не понял как производить с ней потом вычисления
(defun DEL (A X)
 (if X
  (if (equal (car X) A)
   (DEL A (cdr X))
   (cons (car X) (DEL A (cdr X))))))
2. Дана функция y=3*x^3 + 4*x . Написать программу для поиска минимального значения y в промежутке x[-2;2] с шагом 0,3
(loop for i from -10 to 10 by 3 maximize (+ (* (expt (* 0.2 i) 3) 3) (* 4 x)))

Решение задачи: «Удалить из списка все элементы, меньше заданного x»

textual
Листинг программы
(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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы