about summary refs log tree commit diff stats
path: root/cpp/counters.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-04-14 23:52:16 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-04-14 23:55:20 -0700
commitf3bce7176bc15ec04739c61db0d189cbaaaca7d8 (patch)
tree47f680fa2a130ad9773b67d39d7e4e7b7b38907a /cpp/counters.mu
parentf575154aeac5361b1ca467f0487f7126ea27e774 (diff)
downloadmu-f3bce7176bc15ec04739c61db0d189cbaaaca7d8.tar.gz
1065 - example program for closures
Diffstat (limited to 'cpp/counters.mu')
-rw-r--r--cpp/counters.mu32
1 files changed, 32 insertions, 0 deletions
diff --git a/cpp/counters.mu b/cpp/counters.mu
new file mode 100644
index 00000000..c3234d38
--- /dev/null
+++ b/cpp/counters.mu
@@ -0,0 +1,32 @@
+recipe init-counter [
+  default-space:address:space <- new location:type, 30:literal
+  n:integer <- next-ingredient
+  reply default-space:address:space
+]
+
+recipe increment-counter [
+  default-space:address:space <- new location:type, 30:literal
+  0:address:space/names:init-counter <- next-ingredient  # setup outer space; it *must* come from 'init-counter'
+  x:integer <- next-ingredient
+  n:integer/space:1 <- add n:integer/space:1, x:integer
+  reply n:integer/space:1
+]
+
+recipe main [
+  default-space:address:space <- new location:type, 30:literal
+  # counter A
+  a:address:space <- init-counter 34:literal
+  # counter B
+  b:address:space <- init-counter 23:literal
+  # increment both by 2 but in different ways
+  increment-counter a:address:space, 1:literal
+  bres:integer <- increment-counter b:address:space, 2:literal
+  ares:integer <- increment-counter a:address:space, 1:literal
+  # check results
+  $print [Contents of counters a ]
+  $print ares:integer
+  $print [ b ]
+  $print bres:integer
+  $print [
+]
+]