RosettaCodeData/Task/Y-combinator/Pluto/y-combinator.pluto

15 lines
324 B
Plaintext

local function y(f)
local g = |r| -> f(|x| -> r(r)(x))
return g(g)
end
local almost_fac = |f| -> (|x| -> x <= 1 ? 1 : x * f(x - 1))
local almost_fib = |f| -> (|x| -> x <= 2 ? 1 : f(x - 1) + f(x - 2))
local fac = y(almost_fac)
local fib = y(almost_fib)
print($"fac(10) = {fac(10)}")
print($"fib(10) = {fib(10)}")