方案:从列表中删除重复的数字

spa*_*ing 5 scheme list duplicate-removal

我写了这个代码来创建从列表给定的参数个数

(define (create-list . e)
   e)
Run Code Online (Sandbox Code Playgroud)

但我需要它从这个块本身的列表中删除任何重复的数字.

我已经尝试并搜索了几个小时,如果没有在其他块上放置几十行代码就无法找到解决方案.

例如,假设我的输入是

(create-list . 2 2 3 5 5 )
Run Code Online (Sandbox Code Playgroud)

我需要创建的列表是'(2 3 5)而不是'(2 2 3 5 5)...

数字的顺序无关紧要.

Tik*_*vis 5

基本上,您需要执行以下操作:

(define (create-list . e) (dedupe e))
Run Code Online (Sandbox Code Playgroud)

我可以想到一个非常简单但可能效率低下的方法来做到这一点:

(define (dedupe e)
  (if (null? e) '()
      (cons (car e) (dedupe (filter (lambda (x) (not (equal? x (car e)))) 
                                    (cdr e))))))
Run Code Online (Sandbox Code Playgroud)

如果你不能使用现有的函数,比如filter,你可以自己做一个:

(define (my-filter pred ls) 
  (cond ((null? ls) '())
        ((pred (car ls)) (cons (car ls) (my-filter pred (cdr ls))))
        (else (my-filter pred (cdr ls)))))
Run Code Online (Sandbox Code Playgroud)