diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-04-14 23:52:16 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-04-14 23:55:20 -0700 |
commit | f3bce7176bc15ec04739c61db0d189cbaaaca7d8 (patch) | |
tree | 47f680fa2a130ad9773b67d39d7e4e7b7b38907a /cpp | |
parent | f575154aeac5361b1ca467f0487f7126ea27e774 (diff) | |
download | mu-f3bce7176bc15ec04739c61db0d189cbaaaca7d8.tar.gz |
1065 - example program for closures
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/090debug | 6 | ||||
-rw-r--r-- | cpp/counters.mu | 32 |
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 [ +] +] |