Lisp:List2与List1的区别

时间:2013-10-23 00:08:21

标签: 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.

1 个答案:

答案 0 :(得分:4)

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

请注意,一旦正确格式化代码,错误就很明显: - )

此外,您正在寻找的功能已经在名为set-difference的Common Lisp中出现。

相关问题