seb*_*598 3 lisp equality list
我想编写一个函数,它将参数作为参数两个列表,并检查第一个元素中的每个元素是否包含在第二个元素中(元素的顺序无关紧要).该函数还将检查两个列表是否具有相同的长度(两个列表不能具有重复元素),因为如果不是,则该函数将返回nill/false.
例如:(ABCDEF)和(BEAFDC)具有相同的元素(nil)和(nil)具有相同的元素
(ABCDEF)和(ABCDEFG)没有相同的元素
问题是我只知道一些基本命令,我只能使用那些命令.这几乎是我所知道的所有命令:
CAR, CDR, LENGTH, NULL, MEMBER, NOT, AND, OR, NOT, MAPCAR, APPLY, DO, SETQ, LET
Run Code Online (Sandbox Code Playgroud)
到目前为止我编写了以下函数,但我不知道如何检查重复的成员,并且它对于我要检查的所有列表都不能正常工作:
(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)))
Run Code Online (Sandbox Code Playgroud)
我希望我能够很好地解释这个问题.
您可以定义一个函数,当列表包含另一个列表时,该函数返回true:
(defun member (x liste)
(cond
((null liste) ())
((equal (car liste) x) liste)
(t (member x (cdr liste)))))
(defun inclus (liste1 liste2)
(cond
((null liste1) t)
((member (car liste1) liste2)(inclus (cdr liste1) liste2))
(t ())))
Run Code Online (Sandbox Code Playgroud)
然后用它来确定两个列表是否相等:
(defun compare (liste1 liste2)
(if ((and (inclus liste1 liste2) (inclus liste2 liste1)))
(print "the 2 lists are equivalent")
(print "the 2 lists aren't equivalent")))
Run Code Online (Sandbox Code Playgroud)