Функционалы - Lisp (229063)
Формулировка задачи:
Добрый день, помогите пожалуйста с заданием, нужно использовать функционалы.
Написать функцию (f-n p x n), которая выдает истину только если ровно для n элементов списка х выполняется предикат р (р – функция или функциональное имя).
Решение задачи: «Функционалы»
textual
Листинг программы
(defun f-n (p x n) (cond ((minusp n) nil) ;; если n отрицательно - вернем Nil ((null x) (zerop n)) ;; если список x пуст, то при нулевом n вернем t, при ненулевом - Nil ((funcall p (car x)) (f-n p (cdr x) (- n 1))) ;; если значение функционала на (car x) истинно - вызов функции на хвосте при уменьшенном на единицу n (t (f-n p (cdr x) n)))) ;; иначе - просто вызов на хвосте при том же n
Объяснение кода листинга программы
В данном коде определен функционал f-n
, который принимает три аргумента: p
, x
и n
.
Далее представлен список из четырех условий, с помощью которых определяется, что делать с переменной n
:
- Если
n
отрицательно, то возвращаетсяnil
. - Если
x
(список) пуст, то приn
равном нулю возвращаетсяt
, в противном случае возвращаетсяnil
. - Если значение функционала, применяемого к первому элементу списка
x
, истинно, то функция вызывается рекурсивно к оставшейся части списка, при этом значениеn
уменьшается на единицу. - Если условие 3 не выполняется, то функция вызывается рекурсивно к оставшейся части списка без изменения значения
n
. В конце определения функционалаf-n
возвращается результат вызова функции на последнем элементе спискаx
и значениеn
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д