aboutsummaryrefslogtreecommitdiff
path: root/docs/buzzard/demo4.th
diff options
context:
space:
mode:
Diffstat (limited to 'docs/buzzard/demo4.th')
-rw-r--r--docs/buzzard/demo4.th30
1 files changed, 30 insertions, 0 deletions
diff --git a/docs/buzzard/demo4.th b/docs/buzzard/demo4.th
new file mode 100644
index 0000000..3f9a76d
--- /dev/null
+++ b/docs/buzzard/demo4.th
@@ -0,0 +1,30 @@
+( compute factorial recursively )
+( take x as input, return x! and x as output )
+
+: fact-help
+
+ dup if
+ 1 - ( leave x-1 on top )
+ fact-help ( leave x-1, [x-1]! )
+ 1 + ( leave x, [x-1]!, x )
+ swap over swap ( leave [x-1]!, x, x )
+ * ( into x!, x )
+ swap ( into x, x! )
+ else
+ 1 swap
+ then
+;
+
+: fact
+
+ fact-help
+ drop
+
+;
+
+: demo4
+ " 4 factorial is: " 4 fact . cr
+ " 6 factorial is: " 6 fact . cr
+;
+
+demo4