目的是在沒有遞歸或任何其他高階過程(map,andmap,apply等)的情況下只用一個foldr調用來編寫過濾器函數。使用單個foldr調用寫入過濾器?
目前,我不過是用它被認爲是一個高階的程序
的目標是有
(filter positive? '(-1 2 3 4 -5 -6))
=> '(2 3 4)
與foldr相似的單一調用andmap
功能使用
(define (filter ps xs)
(if (empty? xs)
ps
(foldr (lambda (p y)
(if (andmap p xs)
(cons p y)
y))
'()
ps)))
如果ps是一個包含過程的列表,那麼我如何實現它,以便返回的列表僅保留對所有過程都爲真的元素?我只能使用一次foldr的調用。 – Chase
這很麻煩,你必須遍歷'if'條件中的過程列表。用'(和map(lambda(f)(fp))ps''替換'(ps s)'' –
好吧,那會是一個問題,我只能使用一次調用foldr而沒有別的東西(不能使用和映射並且沒有遞歸),否則它會減少很多混淆。 – Chase