diff options
author | Pavel Labath <pavelo@centrum.sk> | 2011-05-16 10:58:21 (GMT) |
---|---|---|
committer | Pavel Labath <pavelo@centrum.sk> | 2013-02-16 23:10:16 (GMT) |
commit | 1061e5282d7deeb3e15a5d1c9bc03e0759b1f2cd (patch) | |
tree | 82c384e4afb8e8eefec15e7481c9f5648071ee33 /libs/lua/test/factorial.lua | |
parent | fe2d9476d5025048f45ea7535a8c7412daa50438 (diff) | |
download | fluxbox_pavel-1061e5282d7deeb3e15a5d1c9bc03e0759b1f2cd.zip fluxbox_pavel-1061e5282d7deeb3e15a5d1c9bc03e0759b1f2cd.tar.bz2 |
Add lua as an internal library in libs/lua
Diffstat (limited to 'libs/lua/test/factorial.lua')
-rw-r--r-- | libs/lua/test/factorial.lua | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libs/lua/test/factorial.lua b/libs/lua/test/factorial.lua new file mode 100644 index 0000000..7c4cf0f --- /dev/null +++ b/libs/lua/test/factorial.lua | |||
@@ -0,0 +1,32 @@ | |||
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 | ||