about summary refs log tree commit diff stats
path: root/tangle.mu
diff options
context:
space:
mode:
Diffstat (limited to 'tangle.mu')
-rw-r--r--tangle.mu36
1 files changed, 36 insertions, 0 deletions
diff --git a/tangle.mu b/tangle.mu
new file mode 100644
index 00000000..db890bc8
--- /dev/null
+++ b/tangle.mu
@@ -0,0 +1,36 @@
+# To demonstrate tangle directives, we'll construct a factorial function with
+# separate base and recursive cases. Compare factorial.mu.
+# This isn't a very realistic example, just a simple demonstration of
+# possibilities.
+
+recipe factorial [
+  default-space:address:array:location <- new location:type, 30:literal
+  n:integer <- next-ingredient
+  {
+    +base-case
+  }
+  +recursive-case
+]
+
+after +base-case [
+  # if n=0 return 1
+  zero?:boolean <- equal n:integer, 0:literal
+  break-unless zero?:boolean
+  reply 1:literal
+]
+
+after +recursive-case [
+  # return n * factorial(n - 1)
+  x:integer <- subtract n:integer, 1:literal
+  subresult:integer <- factorial x:integer
+  result:integer <- multiply subresult:integer, n:integer
+  reply result:integer
+]
+
+recipe main [
+  1:integer <- factorial 5:literal
+  $print [result: ]
+  $print 1:integer
+  $print [
+]
+]