我想知道如何使用Scheme / Racket中的foldr,map,filter等将下面的显式递归函数转换为更高阶/抽象函数。
(define (insertNoDups f element lst)
(cond[(empty? lst) (cons element lst)]
[(f element (first lst)) lst]
[else (cons (first lst)
(insertNoDups f element (rest lst)))]))
(define (remove-dups f lst)
(cond[(empty? lst) empty]
[else (insertNoDups f
(first lst)
(remove-dups f (rest lst)))]))
答案 0 :(得分:0)
insertNoDups(将其重命名为insert-no-dups):使用member-procedure
谓词(更多信息 - > http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Searching-Lists.html)和使用element
到前面如果没有找到。
remove-dups:在这里看看ÓscarLópez的答案 - > How to remove all the duplicates in a list using scheme (only abstract list functions allowed)并使用member-procedure
谓词代替member?