Удаление всех положительных чисел из многоуровневого списка - Lisp

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

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

Определите функцию (f s), результатом которой является список, получающийся после удаления на всех уровнях всех положительных элементов списка чисел s.

Решение задачи: «Удаление всех положительных чисел из многоуровневого списка»

textual
Листинг программы
(defun task (lst)
  (cond ((null lst) nil)
        ((and (numberp (car lst)) (plusp (car lst))) (task (cdr lst)))
        ((listp (car lst)) (cons (task (car lst)) (task (cdr lst))))
        (t (cons (car lst) (task (cdr lst))))))
 
==> task
 
(task '(1 2 0 -3 (((-7 8 -9)))))
 
==> (0 -3 (((-7 -9))))
 
(defun task (lst)
  (mapcar (lambda (x) (if (listp x) (task x) x)) 
    (remove-if (lambda (y) (and (numberp y) (plusp y))) lst)))
 
 
==> task
 
(task '(1 2 0 -3 (((-7 8 -9)))))
 
==> (0 -3 (((-7 -9))))

Объяснение кода листинга программы

В первом представленном коде функция task принимает в качестве аргумента список lst. В функции используется условная конструкция cond, которая проверяет, является ли список пустым. Если это так, то возвращается nil. Если первый элемент списка является числом и больше нуля, то функция вызывается рекурсивно для оставшейся части списка. Если первый элемент является списком, то функция вызывается рекурсивно для каждого элемента списка. В противном случае первый элемент списка добавляется в результат, а функция вызывается рекурсивно для оставшейся части списка. Во втором представленном коде функция task также принимает в качестве аргумента список lst. Здесь используется функция mapcar, которая применяет к каждому элементу списка анонимную функцию. Если элемент является списком, то функция task вызывается рекурсивно для этого элемента. В противном случае элемент просто добавляется в результат. Затем используется функция remove-if, которая удаляет из списка все элементы, для которых анонимная функция возвращает true. Анонимная функция проверяет, является ли элемент числом и больше нуля. Оба представленных кода выполняют одну и ту же задачу — удаление всех положительных чисел из многоуровневого списка.

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


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

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

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