Глубина последнего вхождения элемента Y, удовлетворяющего некоторому предикату P, в список W - Lisp
Формулировка задачи:
Напишите функцию, определяющую глубину последнего вхождения элемента Y, удовлетворяющего некоторому предикату P, в список W.
Есть написанная программа. Помогите пожалуйста глупой девушке понять как проверить ее работоспособность. Т.е. как задавать предикаты, у меня XLisp. Очень буду благодарна за помощь!
(defun maxDepth1 (f s g) ; вызов для: предикат f, список s, текущая глубина g
(cond ((null s) 0) ; если список пустой – глубина 0
((listp (first s)) (max ;если первый элемент список – то максимум из
(maxDepth1 f (rest s) g) ; глубины вхождения в этот спсок (maxDepth1 f (first s) (+ 1 g)); и хвоста
)
)
((funcall f (first s)) (max g ;если элемент не список и пердикат выполняется
(maxDepth1 f (rest s) g) ; то максимум из текущей глубины и хвоста
)
)
(t (maxDepth1 f (rest s) g)) ;иначе глубина вхождения для хвоста
)
)
(defun maxDepth (p w) ;предикат для вызова
(maxDepth1 p w 0) ;задаем начальную глубину = 0
)Решение задачи: «Глубина последнего вхождения элемента Y, удовлетворяющего некоторому предикату P, в список W»
textual
Листинг программы
(maxDepth #'(lambda (x) (zerop (rem x 3)) Список) ;; поиск кратного трем