summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/deps/lua/test/factorial.lua
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 22:40:55 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-01-21 22:40:55 +0100
commit5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda (patch)
tree1acdfa5220cd13b7be43a2a01368e80d306473ca /examples/redis-unstable/deps/lua/test/factorial.lua
parentc7ab12bba64d9c20ccd79b132dac475f7bc3923e (diff)
downloadcrep-5d8dfe892a2ea89f706ee140c3bdcfd89fe03fda.tar.gz
Add Redis source code for testing
Diffstat (limited to 'examples/redis-unstable/deps/lua/test/factorial.lua')
-rw-r--r--examples/redis-unstable/deps/lua/test/factorial.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/examples/redis-unstable/deps/lua/test/factorial.lua b/examples/redis-unstable/deps/lua/test/factorial.lua
new file mode 100644
index 0000000..7c4cf0f
--- /dev/null
+++ b/examples/redis-unstable/deps/lua/test/factorial.lua
@@ -0,0 +1,32 @@
+-- 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