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)...
数字的顺序无关紧要.
基本上,您需要执行以下操作:
(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)