これは条件付き 構文形式であるか、コンパイラ/インタープリターによって特殊なケースとして扱われるコア構文形式に展開されるマクロとして実装される場合があります。
ラケットのドキュメントにあるリストには特別な形式として含まif
れていますが、含まれていないand
ため、後者はおそらく前者の観点から実装されています。しかし、R5RS はand
構文キーワードとしてリストされています。したがって、これは特別な構文またはマクロのいずれかであると言えます。
and
任意のフォームをフォーム(and a b c ...)
として書き直すのは簡単です。if
(if a (if b (if c #t #f) #f) #f)
lambda
every
私には問題ありませんが、 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))