2013-03-20 92 views
1

我知道如何删除元素时有列表和变量,但有没有办法从列表中删除元素使用另一个列表?实施例:(列表1 2 3 4 5)(表1 2 3)的产率(表4 5)删除列表与列表

+0

是相同的结果预期的(表4 1 2 3 5)和(表4 5 1 2 3)? – GoZoner 2013-03-20 15:49:31

+0

另外,你为什么要这样做?如果您试图表示类似于减法的东西,则列表表示可能不合适。球拍包括集合作为数据结构:http://docs.racket-lang.org/reference/sets.html – dyoo 2013-03-20 19:50:22

回答

1

这是一样具有可变的,但需要使用成员函数,而不是等于?:

#lang racket 
; remove every element included in rlist from flist 
(define (remove-list rlist flist) 
    (if (empty? flist) 
     '() 
     (let ((c (car flist))) 
     (if (member c rlist) ; <==== 
      (remove-list rlist (cdr flist)) 
      (cons c (remove-list rlist (cdr flist))))))) 

(remove-list (list 1 2 3) (list 1 2 3 4 5)) 
=> '(4 5) 
1

在球拍这是相当简单的,只需使用remove*内置程序:

(remove* (list 1 2 3) (list 1 2 3 4 5)) 
=> '(4 5)