如何将显式递归函数转换为Scheme中的高阶/抽象函数

时间:2015-11-20 05:18:12

标签: recursion scheme racket fold higher-order-functions

我想知道如何使用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)))]))

1 个答案:

答案 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?