Life Goes On

まあまあだけど楽しんでる方です

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))

と定義しています。

とあったのですが、なぜこれで無限ループが回避できるのか分かりません‥。何が違うんだろう?