about summary refs log tree commit diff stats
path: root/archive/1.vm/counters.mu
diff options
context:
space:
mode:
Diffstat (limited to 'archive/1.vm/counters.mu')
-rw-r--r--archive/1.vm/counters.mu29
1 files changed, 29 insertions, 0 deletions
diff --git a/archive/1.vm/counters.mu b/archive/1.vm/counters.mu
new file mode 100644
index 00000000..ea2fa77d
--- /dev/null
+++ b/archive/1.vm/counters.mu
@@ -0,0 +1,29 @@
+# example program: maintain multiple counters with isolated lexical scopes
+# (spaces)
+
+def new-counter n:num -> default-space:space [
+  default-space <- new location:type, 30
+  load-inputs  # initialize n
+]
+
+def increment-counter outer:space/names:new-counter, x:num -> n:num/space:1 [
+  local-scope
+  load-inputs
+  0:space/names:new-counter <- copy outer  # setup outer space; it *must* come from 'new-counter'
+  n/space:1 <- add n/space:1, x
+]
+
+def main [
+  local-scope
+  # counter A
+  a:space/names:new-counter <- new-counter 34
+  # counter B
+  b:space/names:new-counter <- new-counter 23
+  # increment both by 2 but in different ways
+  increment-counter a, 1
+  b-value:num <- increment-counter b, 2
+  a-value:num <- increment-counter a, 1
+  # check results
+  $print [Contents of counters], 10/newline
+  $print [a: ], a-value, [ b: ], b-value, 10/newline
+]