我正在尝试创建一个方案函数,给出两个列表L1和L2,将从L1中删除L2中存在的任何项目。
我有一个小小的开始,但我不知道到底还能做什么。
(define (remove L1 L2)
(((null? L2) L1))
答案 0 :(得分:1)
以下是简单案例的代码段。
(define (remove L1 L2)
(cond ((null? L1) '())
((memv (car L1) L2) (remove (cdr L1) L2))
(else (cons (car L1) (remove (cdr L1) L2)))))
请记住,在Scheme或任何函数式语言中,您需要提出的问题不是“我应该做什么?”,而是您应该问“我有什么价值需要制作?“。
请注意,此简单示例不处理嵌套列表。因此(remove '(A (C D)) '(B C D))
会生成(A (C D))
。处理嵌套列表留给读者练习:D
答案 1 :(得分:0)
您只需使用SRFI 1的lset-difference
:
(lset-difference = '(1 2 3 4 5) '(3 4 5 5 6))
; => (1 2)
在我的例子中,=
是比较函数。如果您的列表包含字符串,而不是数字,则应使用string=?
代替=
。