我对这个 lisp 函数有疑问。我想创建一个接收两个列表的函数,并验证第一个列表的元素(所有元素)是否出现在第二个列表中,如果发生这种情况,它会返回 True。
目前我有以下代码:
(defun ocorre-listas (l1 l2)
(dolist (elem1 l1)
(dolist (elem2 l2)
(if (equal elem1 elem2)
t))))
它没有像预期的那样工作。我应该尝试只用一个简单的递归来做吗?我真的不知道如何迭代两个列表来寻找相等的元素。
我决定尝试不使用 dolists。这就是我现在拥有的,它仍然无法正常工作。
(defun ocorre-listas (l1 l2)
(cond ((null l1) nil)
((null l2) nil)
((if (/= (first l1)(first l2)) (ocorre-listas l1 (rest l2))))
(t (if (= (first l1) (first l2)) (ocorre-listas (rest l1)(rest l2))))))
我收到一条警告说“t”是一个未定义的函数。此外,我尝试的每个示例都返回 null。我做错了什么?
最佳答案
在第二段代码中,如果第一个列表为空,则其所有元素都在第二个列表中。
你不需要 ifs
因为你在 cond
测试列表是否为空后,你只需要测试第一个列表的第一个元素是否在第二个列表中,然后用没有这个元素的第一个列表再次调用函数
关于Lisp - lisp 的元素出现在其他列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364272/