Yコンビネータ
フィボナッチと階乗やってみる。
> let y f = f $ y f > :i y y :: (b -> b) -> b -- Defined at <interactive>:1:4 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 7 13 > y (\f n -> if n < 2 then n else f (n-1) + f (n-2)) 100 Interrupted. ← (´・ω・`)ショボーン > y (\f (a,b) m -> if m < 2 then a else f (b, a + b) (m - 1)) (1,1) $ 7 13 > y (\f (a,b) m -> if m < 2 then a else f (b, a + b) (m - 1)) (1,1) $ 100 354224848179261915075
フィボナッチ。
> y (\f n -> if n < 2 then n else n * f (n-1)) 10 3628800 > y (\f n -> if n < 2 then n else n * f (n-1)) 100 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 > y (\f a b -> if b < 2 then a else f (a*b) (b-1)) 1 $ 10 3628800 > y (\f a b -> if b < 2 then a else f (a*b) (b-1)) 1 $ 100 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
階乗。