2012-03-14 8 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を与えるには、2つのパラメータをとる(関数を受け取り、私は1つのリストを持っているので)、基本ケース、およびリストを含んでいます。私はリストにゼロ以上のブール値があり、それらがすべて真であるとすれば、私の2行目のコードが真になることを期待しています。しかし明らかにそうではありません。

答えて

7

Andは、特殊な形式であり、その2番目の引数として手順を期待しているfoldr、動作しません。この特定のケースのための別の代替

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

andmapを用いて次のようになります:代わりにこれを試みる

スキームシステムにおいて
(andmap identity '(#t #t #f)) 
+0

まあ、私はラケットを使用していますし、コード行は、まだ私にエラーを与える:「と:質問の結果は、真または偽ではありません:「偽」。 – newprogrammer

+0

それは私にエラー "andmap:identityからブール値を期待しています(andmapに与えられた関数)が、" true "を受け取っています。たぶんそれは私がスキームではなくラケットを使っているという事実と関係しているかもしれません – newprogrammer

+0

私はラケットを使っています。どの言語を使用していますか? –

0

andは、典型的には、マクロまたは特殊形式としてではなく手順のように定義されますそれが動作しない理由である:

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

Error: unbound variable: and