In Ruby http://is.gd/gdJ :
y = proc { |generator| proc { |x| proc { |*args| generator.call(x.call(x)).call(*args) } }.call(proc { |x| proc { |*args| generator.call(x.call(x)).call(*args) } }) }
# Y = λf·(λx·f (x x)) (λx·f (x x)) y = lambda generator:\ (lambda x: lambda *args: generator(x(x))(*args))\ (lambda x: lambda *args: generator(x(x))(*args))
factorial_generator = lambda callback: lambda n: n*callback(n-1) if n > 1 else 1 factorial = y(factorial_generator) n = 5 print "%d! = %d" % (n, factorial(5))
In Ruby http://is.gd/gdJ :
In Python: Example with factorial: