スキーム/ラケット:ブール値で折り畳む
-
13-12-2019 - |
質問
(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 つのパラメーターを取ります)、基本ケース、およびリストを受け取ります。リストに 0 個以上のブール値があり、それらがすべて true の場合、コードの 2 行目が true を返すことを期待しており、そのように動作すると考えました。しかし、どうやらそうではありません。
解決
And
は特殊な形式なので機能しません foldr
, を期待しています。 手順 2 番目の引数として。代わりにこれを試してください:
(foldr (lambda (x y) (and x y)) #t '(#t #t #f)) ;#t as base case
この特定のケースに対する別の代替方法は、 andmap
:
(andmap identity '(#t #t #f))
他のヒント
Scheme Systemでは、and
は通常マクロまたは特別な形式として定義され、手順としては機能しません。
#;1> +
#<procedure C_plus>
#;2> and
Error: unbound variable: and
. 所属していません StackOverflow