Я хочу написать функцию, которая принимает в качестве параметров два списка и проверяет, включен ли каждый элемент в первом списке во второй (порядок элементов не имеет значения). Функция также будет проверять, имеют ли два списка одинаковую длину (два списка не могут иметь повторяющихся элементов), потому что если нет, то функция вернет nill/false.
Например: (A B C D E F) и (B E A F D C) имеют одинаковые элементы (nil) и (nil) имеют одинаковые элементы
(A B C D E F) и (A B C D E F G) не имеют одинаковых элементов
Проблема в том, что я знаю только некоторые основные команды и могу использовать только их. Это почти все команды, которые я знаю:
CAR, CDR, LENGTH, NULL, MEMBER, NOT, AND, OR, NOT, MAPCAR, APPLY, DO, SETQ, LET
Я написал следующую функцию до сих пор, но я не знаю, как проверить наличие повторяющихся членов, и она не работает должным образом для всех списков, которые я хочу проверить:
(defun same-elem-p (lst1 lst2)
(cond ((not (null lst1))
(cond ((member (car lst1) lst2)
(same-elem-p (cdr lst1) lst2))
(t nil)))
(t t)))
Надеюсь, я достаточно хорошо объяснил проблему.