5
(foldr + 0 '(1 2 3 4))

10私が期待するものを返しますが、

(foldr and false '(true true false))

エラーが発生します

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

foldr関数(1つのリストがあるので2つのパラメーターを取ります)、基本ケース、およびリストを取ります。リストにゼロを超えるブール値があり、それらがすべてtrueである場合、コードの2行目がtrueを返すことを期待しています。これが、機能すると思った方法です。しかし、明らかにそうではありません。

4

2 に答える 2

8

Andは特殊な形式であり、2番目の引数としてプロシージャfoldrを期待している。では機能しません。代わりにこれを試してください:

(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case

この特定のケースの別の代替手段は、以下を使用することandmapです。

(andmap identity '(#t #t #f))
于 2012-03-14T00:39:46.830 に答える
0

スキームシステムでandは、通常、プロシージャとしてではなく、マクロまたは特殊な形式として定義されます。これが機能しない理由です。

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

Error: unbound variable: and
于 2012-03-14T00:42:35.493 に答える