Отбор элементов, удовлетворяющих предикату - 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
проверяет три условия:
- Если
lst
равноnil
, то возвращаетсяnil
, так как отбор не возможен. - Если
funcall p (car lst)
возвращает истину, то возвращается новый список, в котором первый элементcar lst
соединен с оставшимся спискомfilter p (cdr lst)
. - Если условие выше не выполняется, то возвращается результат
filter p (cdr lst)
. Таким образом, код реализует функцию, которая вызывает предикат для каждого элемента списка и возвращает новый список, содержащий только те элементы, для которых предикат вернул истину.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д