Subversion Repositories WoWGM

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 tristanc 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