]> git.saurik.com Git - redis.git/blob - deps/lua/test/factorial.lua
7c4cf0fa45da1780292b8bc5e6e99cc16e4c6711
[redis.git] / deps / lua / test / factorial.lua
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