list - Lisp:List2 与 List1 的区别

标签 list lisp

我对 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/

相关文章:

c# - 根据键对字典列表进行排序

python - python 中的嵌套列表和 for 循环程序给了我一个疯狂的结果

functional-programming - Common LISP 传递的参数少于所需的参数 - 这是怎么回事?

tree - LISP 二叉树 - 最大深度

python - 计算给定元组列表的每个平均值

list - 当对象是动态的时,如何在 Scala 中对列表进行排序?

python - 根据字符串拆分将列表拆分为子列表

emacs - Scheme 中最接近 Slime 的东西是什么?

if-statement - Racket编程——我的 map

java - OOP:有没有简单的接口(interface)提取和不那么冗长的自动转发的习惯用法?