2013-03-20 86 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)