竹内郁雄氏のたらい回し関数をClojureで書いてみました。とは言っても、ClojureもLISPファミリーの一員なので、定義を単純に式に置き換えるだけ。めんどくさいことは皆無です。中で何をしているかが知りたいので、複数の関数を逐次実行させるためのdo命令*1を用いて、prnで値を表示させています。
(defn tak [x y z] (do (prn x y z) (if (<= x y) y (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)))))
*1:Common Lispで逐次実行はprognなのですが、それに相当するClojureの命令を見つけるのに手間取ってしまいました。