Curry

2008-05-03

pow = λm n. n m とか謎過ぎる... λm n. n (λl s. m (l s)) (λs z. s z) なら分かるんだけど.つまり times m を one に対し n 回適用するの.

n = ¥f -> ¥x -> f^n x

を . (関数結合)で表記すると

n = ¥f -> (f . f . f ... n times) で
m = ¥g -> (g . g . g ... m times) だから
n m h = (¥g -> (g . g . g ... m times) . ¥g -> (g . g . g ... m times) . ¥g -> (g . g . g ... m times) ... n times) h で、(x . y) z = x ( y z) にしたがって Haskell の $ (f$x = f x, 右結合) を 使うと

¥g -> (g . g . g ... m times) $ ¥g -> (g . g . g ... m times) $ ¥g -> (g . g . g ... m times) ... n times $ h
で . の結合則を使うと ¥h -> h . h . h ... m^n times になるよ。
これじゃあ直感的じゃないかな。