1234567891011121314151617181920212223242526272829303132 |
- -- function closures are powerful
- -- traditional fixed-point operator from functional programming
- Y = function (g)
- local a = function (f) return f(f) end
- return a(function (f)
- return g(function (x)
- local c=f(f)
- return c(x)
- end)
- end)
- end
- -- factorial without recursion
- F = function (f)
- return function (n)
- if n == 0 then return 1
- else return n*f(n-1) end
- end
- end
- factorial = Y(F) -- factorial is the fixed point of F
- -- now test it
- function test(x)
- io.write(x,"! = ",factorial(x),"\n")
- end
- for n=0,16 do
- test(n)
- end
|