?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  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
  33.