2015-11-15 71 views
0
(define (remove-duplicates l) 
    (cond ((empty? l) 
     '()) 
     ((member (first l) (rest l)) 
     (remove-duplicates (rest l))) 
     (else 
     (cons (first l) (remove-duplicates (rest l)))))) 

此代碼有此結果。從列表中刪除重複以及元素本身 - 球拍,方案

> (remove-duplicates (list 1 1 2 2 3 4)) 
(list 1 2 3 4) 

在不使用過濾器,我想的結果是

(刪除-重複(列表1 1 2 2 3 4))給出 (列表3 4)

幫助將深表謝意。提前致謝。

回答

1

你可以使用一個輔助功能:

(define helper 
     (lambda (lst collector dup) 
     (cond [(null? lst) collector] 
       [(memq (car lst) (cdr lst)) (helper (cdr lst) collector (cons (car lst) dup))] 
       [(memq (car lst) dup) (helper (cdr lst) collector dup)] 
       [else 
       (helper (cdr lst) (cons (car lst) collector) dup)]))) 

維護兩個LST,收集所有獨特的元素,DUP用於重複元素。

(define remove-dup 
    (lambda (lst) 
    (reverse (helper lst '() '())))) 
+0

功能的偉大工程,但恐怕它不會在較大的功能工作。我不知道哪些元素將成爲收藏家,而當我執行它時,哪些元素將成爲重複元素。 – RacketBeginner

+0

「更大的功能」是什麼意思? –

+0

如果您對球拍/方案不熟悉,我建議您閱讀「小小的策劃者」。 –