Я хочу написать функцию, которая принимает в качестве параметров два списка и проверяет, включен ли каждый элемент в первом во втором (порядок элементов не имеет значения). Функция также будет проверять, имеют ли два списка одинаковые длины (два списка не могут иметь повторяющиеся элементы), потому что если нет, функция вернет nill/false.LISP: Как проверить, имеют ли два списка одинаковые элементы?
Например: (ABCDEF) и (BEAFDC) имеют одни и те же элементы (ноль) и (ноль) имеют одни и те же элементы
(ABCDEF) и (АБВГДЕЖ) не имеют одни и те же элементы
Проблема в том, что я знаю только некоторые основные команды, и я могу использовать только те. Это почти все команды, которые я знаю:
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)))
Надеюсь, я объяснил проблему достаточно хорошо.
Спасибо за ваш ответ. Можно ли написать все это только одной функцией? Мне было интересно, почему вы написали функцию-член; он еще не существует в LISP? – seby598
Конечно, есть способ, но я не думаю, что это было бы просто! и да функция-член уже существует, но я это забыл. Прошло больше года, чем я не программировал в LISP. – Kira