Anonymous recursion: Difference between revisions
Content added Content deleted
Line 960: | Line 960: | ||
=={{header|Python}}== |
=={{header|Python}}== |
||
<lang python>from functools import partial |
|||
>>> Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args))) |
|||
>>> fib = lambda f: lambda n: None if n < 0 else (0 if n == 0 else (1 if n == 1 else f(n-1) + f(n-2))) |
>>> fib = lambda f: lambda n: None if n < 0 else (0 if n == 0 else (1 if n == 1 else f(n-1) + f(n-2))) |
||
>>> [ Y(fib)(i) for i in range(-2, 10) ] |
|||
[None, None, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34]</lang> |
|||
Same thing as the above, but modified so that the function is uncurried: |
|||
<lang python> |
|||
>>> Y = lambda f: (lambda x: x(x))(lambda y: lambda *args: f(y(y), *args)) |
|||
>>> fib = lambda f, n: None if n < 0 else (0 if n == 0 else (1 if n == 1 else f(n-1) + f(n-2))) |
|||
>>> [ Y(fib)(i) for i in range(-2, 10) ] |
>>> [ Y(fib)(i) for i in range(-2, 10) ] |
||
[None, None, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34]</lang> |
[None, None, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34]</lang> |