我对 lisp 还很陌生,并试图通过获取两个列表的差异来解决这个问题。 我需要找到列表 2 中不在列表 1 中的所有数字
希望得到 (diff list1 list2)
...例如 (diff '(4 5 6 8 9) '(1 2 4 6 8 9))
返回将是 (1 2)
到目前为止我有什么
(defun diff (l1 l2)
(cond ((null l1) nil)
((member (first l1) l2) (diff(rest l1) l2))
(t (cons (first l2) (diff (rest l2) l1)))))
(defun diff1 (l1 l2)
(cond ((null l1) nil)
((member (first l2) l1) (diff (rest l2) l1))
(t (cons (first l2) (diff (rest l2) l1)))))
这是我尝试过的两种不同的方法,但似乎无法让它在列表 1 上返回列表 2。
最佳答案
你在 diff
的最后一行有错别字:
(defun diff (l1 l2)
(cond ((null l2) nil)
((member (first l2) l1) (diff l1 (rest l2)))
(t (cons (first l2) (diff l1 (rest l2))))))
请注意,一旦您正确格式化代码,该错误就会很明显:-)
此外,您要查找的函数已经存在于 Common Lisp 中,名称为 set-difference
.
关于list - Lisp:List2 与 List1 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19530511/