方案功能,用于从一个列表的项目中删除另一个列表的项目



我正在尝试创建一个scheme函数,该函数给定两个列表L1和L2,将从L1中删除L2中存在的任何项目。

我有一个小小的开始,但我不知道还能做什么。

(define (remove L1 L2)
(((null? L2) L1))

下面是一个简单案例的代码片段。

(define (remove L1 L2)
  (cond ((null? L1) '())
        ((memv (car L1) L2) (remove (cdr L1) L2))
        (else  (cons (car L1) (remove (cdr L1) L2)))))

请记住,在Scheme或任何函数式语言中,您需要问的问题不是"我应该做什么?",而是"我需要产生什么值?"

请注意,这个简单的示例不处理嵌套列表。因此CCD_ 1会产生CCD_ 2。处理嵌套列表留给读者练习:D

您可以简单地使用SRFI 1的lset-difference:

(lset-difference = '(1 2 3 4 5) '(3 4 5 5 6))
; => (1 2)

在我的示例中,=是比较函数。如果您的列表包含字符串,比如说,而不是数字,那么您应该使用string=?来代替=

最新更新