1-- function closures are powerful 2 3-- traditional fixed-point operator from functional programming 4Y = 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) 12end 13 14 15-- factorial without recursion 16F = 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 23factorial = Y(F) -- factorial is the fixed point of F 24 25-- now test it 26function test(x) 27 io.write(x,"! = ",factorial(x),"\n") 28end 29 30for n=0,16 do 31 test(n) 32end 33