]>
Commit | Line | Data |
---|---|---|
1 | -- function closures are powerful | |
2 | ||
3 | -- traditional fixed-point operator from functional programming | |
4 | Y = function (g) | |
5 | local a = function (f) return f(f) end | |
6 | return a(function (f) | |
7 | return g(function (x) | |
8 | local c=f(f) | |
9 | return c(x) | |
10 | end) | |
11 | end) | |
12 | end | |
13 | ||
14 | ||
15 | -- factorial without recursion | |
16 | F = function (f) | |
17 | return function (n) | |
18 | if n == 0 then return 1 | |
19 | else return n*f(n-1) end | |
20 | end | |
21 | end | |
22 | ||
23 | factorial = Y(F) -- factorial is the fixed point of F | |
24 | ||
25 | -- now test it | |
26 | function test(x) | |
27 | io.write(x,"! = ",factorial(x),"\n") | |
28 | end | |
29 | ||
30 | for n=0,16 do | |
31 | test(n) | |
32 | end |