Функционалы - Lisp (229063)

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

Добрый день, помогите пожалуйста с заданием, нужно использовать функционалы. Написать функцию (f-n p x n), которая выдает истину только если ровно для n элементов списка х выполняется предикат р (р – функция или функциональное имя).

Код к задаче: «Функционалы - Lisp (229063)»

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

11   голосов, оценка 4.273 из 5


СОХРАНИТЬ ССЫЛКУ