18 lines
644 B
Crystal
18 lines
644 B
Crystal
def ycombo(f)
|
|
f.call(-> { ycombo(f) })
|
|
end
|
|
|
|
def fac(x) # the more efficient tail recursive version...
|
|
facp = -> (fn : Proc(BigInt -> (Int32 -> BigInt))) {
|
|
-> (n : BigInt) { -> (i : Int32) {
|
|
i < 2 ? n : fn.call.call(i * n).call(i - 1) } } }
|
|
ycombo(facp).call(BigInt.new(1)).call(x)
|
|
end
|
|
|
|
def fib(x) # the more efficient tail recursive version...
|
|
fibp = -> (fn : Proc(BigInt -> (BigInt -> (Int32 -> BigInt)))) {
|
|
-> (f : BigInt) { -> (s : BigInt) { -> (i : Int32) {
|
|
i < 2 ? f : fn.call.call(s).call(f + s).call(i - 1) } } } }
|
|
ycombo(fibp).call(BigInt.new).call(BigInt.new(1)).call(x)
|
|
end
|