これは条件付き 構文形式であるか、コンパイラ/インタープリターによって特殊なケースとして扱われるコア構文形式に展開されるマクロとして実装される場合があります。
ラケットのドキュメントにあるリストには特別な形式として含まifれていますが、含まれていないandため、後者はおそらく前者の観点から実装されています。しかし、R5RS はand構文キーワードとしてリストされています。したがって、これは特別な構文またはマクロのいずれかであると言えます。
and任意のフォームをフォーム(and a b c ...)として書き直すのは簡単です。if(if a (if b (if c #t #f) #f) #f)
lambdaevery私には問題ありませんが、 SRFI-1 (またはRacket のandmap)からも使用できます。
(every identity '(#t #f))
返すべき#fです。
編集: Joshua Taylor が指摘するlambdaように、関数 like を介してあなたを呼び出すことfoldlは短絡しません。andこれは、そもそもを呼び出す目的を無効にします。
もう 1 つのことは、Racket のfoldl最後の引数lambdaは、一連のアプリケーションの前の結果を受け取る引数です。したがって、実装は本当に
(foldl (lambda (a b) (and b a)) #t '(#t #f))