Yコンビネータで再帰
せっかくGrassが盛り上がってるので、少しでもついていこうと、Yコンビネータを使った再帰に挑戦してます。エラーが出なくなったと思ったら無限ループ!
色々調べてたら irie @ ウィキ - grass.el に例が載ってました。
階乗の関数を返す関数gは、一般的な式
g := λ f n . (ISZERO n) 1 (MULT n (f (PRED n)))を使うと、「f (PRED n)」の部分を先に評価しようとして無限ループしてしまうので、
g := λ f n. MULT n (((ISZERO (PRED n)) (TRUE 1) f) (PRED n))と定義しています。
とあったのですが、なぜこれで無限ループが回避できるのか分かりません‥。何が違うんだろう?