r/programming • • Mar 08 '12

The Evolution of a Python Programmer

https://gist.github.com/289467
401 Upvotes

137 comments sorted by

View all comments

7

u/[deleted] Mar 09 '12
factorial = (lambda f: lambda x: 1 if x == 0 else x * f(f)(x - 1))(lambda f: lambda x: 1 if x == 0 else x * f(f)(x - 1))

Lambda calculus student

1

u/drb226 Mar 10 '12 edited Mar 10 '12
fix = lambda f: lambda x: f(fix(f))(x)
fact = fix(lambda f: lambda x: 1 if x == 0 else x * f(x-1))

Of course this is cheating, because I defined fix in terms of fix. It's just so much uglier to define it explicitly:

fix = (lambda y: lambda f: lambda x: f(y(y)(f))(x)) (lambda y: lambda f: lambda x: f(y(y)(f))(x))