fn
(fn name? [params...] body...)
(fn name? ([params...] body...)+
ラムダを組み立てます。省略可能な名前は自己呼び出しのために自分自身を束縛します(labels の自己束縛なので、再帰呼び出しは直接です)。複数アリティは引数個数でディスパッチする 1 つの lambda で、多アリティの defn がディスパッチするのと同じしかたです。節は外側のスコープを閉じ込めます(ローカル関数はありません)。引数はベクターもマップパターンも destructuring できます。本体中の recur は囲みの節へ新しい引数値で跳び戻ります。
リーダーの #(...) 形式は、オラクルのリーダーと同じく (fn* [p1__N# ...] (body...)) と読まれます。% と %1 が第 1 引数、%N が N 番目、%& が残りで、引数ベクターは使われた最大の %N までなので、それ以外の個数での呼び出しはシグナルします。本体のフォームは 1 つの呼び出しに包まれます -- 複数フォームの本体には明示的な do が要ります。#(...) の中の #(...) は拒否されます。クオートしても、read-string で読んでも、マクロに渡しても、その fn* フォームです。