2012-03-14 91 views
4
(foldr + 0 '(1 2 3 4)) 

回報10這是我所期望的,但方案/球拍:倍布爾

(foldr and false '(true true false)) 

給我的錯誤

and: expected an open parenthesis before and, but found none 

foldr需要一個功能(它有兩個參數,因爲我有一個列表),一個基本情況和一個或多個列表。我希望我的第二行代碼能夠返回true,如果這個列表的布爾值超過零,並且它們都是真的,那我就是這麼想的。但顯然不是。

回答

7

And是一種特殊形式,不適用於foldr,它期望程序作爲其第二個參數。嘗試這個代替:

(foldr (lambda (x y) (and x y)) #f '(#t #t #f)) 

另一種替代方法對於此特定情況下將使用andmap

(andmap identity '(#t #t #f)) 
+0

嗯,我使用的球拍,以及該行代碼仍然給我的錯誤:「和:問題的結果是不是真的還是假的:「假的」。 – newprogrammer 2012-03-14 00:44:30

+0

第二個給我的錯誤「andmap:期望從身份(賦予給andmap的函數)的布爾值,但收到」真「。也許這是與我使用球拍的事實有關,而不是計劃 – newprogrammer 2012-03-14 00:46:08

+0

我也在使用球拍,它適用於我。你在用什麼語言? – 2012-03-14 00:46:36

0

在計劃系統,and通常被定義爲一個宏或特殊形式,而不是作爲一個過程,這就是爲什麼它不工作:

#;1> + 
#<procedure C_plus> 
#;2> and 

Error: unbound variable: and