Отбор элементов, удовлетворяющих предикату - Lisp

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

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

При необходимости можно использовать локальные или вспомогательные функции. Напишите функцию (filter p x), которая создает список из элементов списка х, удовлетворяющим предикату р (р – функция или функциональное имя).

Решение задачи: «Отбор элементов, удовлетворяющих предикату»

textual
Листинг программы
(defun filter (p lst)
  (cond ((null lst) nil)
          ((funcall p (car lst)) (cons (car lst) (filter p (cdr lst))))
          (t (filter p (cdr lst))))

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

В данном коде реализована функция filter, которая выполняет отбор элементов в списке lst, удовлетворяющих предикату p. Вложенный блок cond проверяет три условия:

  1. Если lst равно nil, то возвращается nil, так как отбор не возможен.
  2. Если funcall p (car lst) возвращает истину, то возвращается новый список, в котором первый элемент car lst соединен с оставшимся списком filter p (cdr lst).
  3. Если условие выше не выполняется, то возвращается результат filter p (cdr lst). Таким образом, код реализует функцию, которая вызывает предикат для каждого элемента списка и возвращает новый список, содержащий только те элементы, для которых предикат вернул истину.

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


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

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

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