gpt4 book ai didi

list - LISP:如何测试两个列表是否具有相同的元素?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:12 24 4
gpt4 key购买 nike

我想编写一个将两个列表作为参数的函数,并检查第一个列表中的每个元素是否都包含在第二个列表中(元素的顺序无关紧要)。该函数还将检查两个列表是否具有相同的长度(两个列表不能有重复的元素),因为如果不相同,则该函数将返回 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)))

我希望我对问题的解释足够好。

最佳答案

您可以定义一个函数,当列表包含另一个列表时返回 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 ())))

然后用它来判断两个列表是否相等:

(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")))

关于list - LISP:如何测试两个列表是否具有相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15760966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com