初学者方案:使用两个列表,并生成列表1中不在list2中的所有成员的列表

时间:2013-03-19 00:11:27

标签: scheme racket

例如:

(check-expect(2-list empty (list 3 4)) empty)
(check-expect(process-2-lists (list "nice" 'blue) empty)(list "nice" 'blue))
(check-expect(process-2-lists (list "nice" 'blue 5 10 5 'blue 5) (list "nice" 5 5 'red "wow")) (list 'blue 10 'blue))

2 个答案:

答案 0 :(得分:1)

我会给你一些提示,像往常一样我希望人们解决自己的功课。这是学习的唯一方法!

(define (process-2-lists l1 l2)
  (cond (<???>       ; if the first list is empty
         <???>)      ; then we return the empty list
        (<???>       ; if the first element in l1 is not in l2 (*)
         (cons <???> ; then we add it to the result using cons
           (process-2-lists <???> l2))) ; and advance the recursion
        (else                           ; otherwise
         (process-2-lists <???> l2))))  ; advance the recursion adding nothing

请注意,我们只需要遍历其中一个列表,我们需要另一个列表进行检查。这里的关键是标有(*)的关键字。我们怎么做呢?那么你可以编写自己的帮助程序来测试另一个列表中元素的成员资格,但如果你看一下documentation,你就会找到你需要的东西。

答案 1 :(得分:0)

列表b中的过滤项目。

(filter
  (lambda (item)
    (not (member item b)))
  a)