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