about summary refs log tree commit diff stats
path: root/tangle.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-05 23:50:50 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-05 23:50:50 -0700
commit20d1c9057a559ce8db83bbc2787ca91348bcb16f (patch)
tree56381f7cc68f93014d72019301f623b7993c63ef /tangle.mu
parent8923d6f658d09de800164b8fc6514475f49307b4 (diff)
downloadmu-20d1c9057a559ce8db83bbc2787ca91348bcb16f.tar.gz
1278 - support before/after tangle directives
No way to only insert code at a label in a specific recipe. Let's see
how that goes.
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 [
+]
+]