about summary refs log tree commit diff stats
path: root/cpp
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
parentf575154aeac5361b1ca467f0487f7126ea27e774 (diff)
downloadmu-f3bce7176bc15ec04739c61db0d189cbaaaca7d8.tar.gz
1065 - example program for closures
Diffstat (limited to 'cpp')
-rw-r--r--cpp/090debug6
-rw-r--r--cpp/counters.mu32
2 files changed, 35 insertions, 3 deletions
diff --git a/cpp/090debug b/cpp/090debug
index b6acae9d..a2a74d18 100644
--- a/cpp/090debug
+++ b/cpp/090debug
@@ -8,14 +8,14 @@ assert(Next_recipe_number < _PRINT);
 case _PRINT: {
   if (isa_literal(instructions[pc].ingredients[0])) {
     trace("run") << "$print: " << instructions[pc].ingredients[0].name;
-    cout << instructions[pc].ingredients[0].name << '\n';
+    cout << instructions[pc].ingredients[0].name;
     break;
   }
   vector<int> result(read_memory(instructions[pc].ingredients[0]));
   for (size_t i = 0; i < result.size(); ++i) {
     trace("run") << "$print: " << result[i];
-    cout << result[i] << " ";
+    if (i > 0) cout << " ";
+    cout << result[i];
   }
-  cout << '\n';
   break;
 }
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 [
+]
+]