def Y = { le -> ({ f -> f(f) })({ f -> le { x -> f(f)(x) } }) } def factorial = Y { fac -> { n -> n <= 2 ? n : n * fac(n - 1) } } assert 2432902008176640000 == factorial(20G) def fib = Y { fibStar -> { n -> n <= 1 ? n : fibStar(n - 1) + fibStar(n - 2) } } assert fib(10) == 55