2012-10-11 36 views
0

謂詞鑑於測試單個項目的謂詞的程序,如positive?,我想創建一個all-are版本的它測試列表中的所有元素是否滿足謂詞定義給出球拍

防爆:
((all-are positive?) '(1 2 3 4)) => #t
((all-are even?) '(2 4 5 6 8)) => #f

all-are應採取謂詞作爲參數,並返回一個新的功能可以應用於元素的列表

+0

請解釋你遇到了什麼問題。目前還不清楚你遇到了什麼困難。 – dyoo

回答

3

這是相當簡單的在現有過程的形式來表示:andmap - 返回#t如果給定的斷言,當應用到列表中的所有元素,計算結果爲適用於所有的人:

(define ((all-are predicate) lst) 
    (andmap predicate lst)) 

我正在使用一些語法糖來返回curried過程,因爲問題指出必須返回函數。它按預期工作:

((all-are positive?) '(1 2 3 4)) 
> #t 

((all-are even?) '(2 4 5 6 8)) 
> #f 

我猜,你必須從頭開始實現的過程,而不是使用現有的程序在我的解決方案。一個很好的練習就是將上面的簡短版本(它表明了需要完成的工作的一般概念)變成簡單的,只用基本形式 - 這可能是你的老師對你的期望。

0

只是想只能用「foldr相似」,基礎知識 代碼原來是:

(define (all-are pred l) 
    (foldr (λ (x y) 
     (and y (pred x))) #t l)) 

嘗試使用foldr相似,與foldl和其他基礎知識,找出必要的參數,這將是一個很好的編程習慣....希望它有幫助!