Реализовать предикат включения, который возвращает истину, если одно множество содержится в другом.
Определения:
Через



Через


Анализ задачи: представление множеств – списки. Решение возможно, если использовать готовые функции mapcar~ и s-eq-predicate.
(defun s-in-predicate (s1 s2)
(cond
((null s2) nil)
(t (eval (cons 'or (mapcar #'(lambda (x) (s-eq-predicate s1 x)) s2 ))))
)
)
Тестирование:
> (s-in-predicate '(a b) '(a b (b a) (c d (a b)f)))
T
Искомая функция:
(defun include-predicate (set1 set2)
(cond ((null set2) nil)
(t (eval (cons 'and
(mapcar #'(lambda (x) (s-in-predicate x set2)) set1))))
)
)
Тестирование:
> (include-predicate '(a b c) '(a e r f g))
NIL
> (include-predicate '(a b c) '(a e r f g b q c j))
T