2015-05-06 04:17:24 +00:00
|
|
|
# example program: maintain multiple counters with isolated lexical scopes
|
|
|
|
# (spaces)
|
2015-01-03 02:13:04 +00:00
|
|
|
|
2016-09-17 21:53:00 +00:00
|
|
|
def new-counter n:num -> default-space:space [
|
2015-10-30 04:31:46 +00:00
|
|
|
default-space <- new location:type, 30
|
2017-12-04 07:25:40 +00:00
|
|
|
load-inputs # initialize n
|
2015-05-06 04:17:24 +00:00
|
|
|
]
|
2015-01-03 02:13:04 +00:00
|
|
|
|
2016-09-17 21:53:00 +00:00
|
|
|
def increment-counter outer:space/names:new-counter, x:num -> n:num/space:1 [
|
2015-07-14 05:43:16 +00:00
|
|
|
local-scope
|
2017-12-04 07:25:40 +00:00
|
|
|
load-inputs
|
2016-09-17 21:53:00 +00:00
|
|
|
0:space/names:new-counter <- copy outer # setup outer space; it *must* come from 'new-counter'
|
2015-10-30 17:00:54 +00:00
|
|
|
n/space:1 <- add n/space:1, x
|
2015-05-06 04:17:24 +00:00
|
|
|
]
|
2015-01-03 02:13:04 +00:00
|
|
|
|
2016-03-08 09:30:14 +00:00
|
|
|
def main [
|
2015-07-14 05:43:16 +00:00
|
|
|
local-scope
|
2015-05-06 04:17:24 +00:00
|
|
|
# counter A
|
2017-11-10 08:47:45 +00:00
|
|
|
a:space/names:new-counter <- new-counter 34
|
2015-05-06 04:17:24 +00:00
|
|
|
# counter B
|
2017-11-10 08:47:45 +00:00
|
|
|
b:space/names:new-counter <- new-counter 23
|
2015-05-06 04:17:24 +00:00
|
|
|
# increment both by 2 but in different ways
|
2015-07-29 08:23:22 +00:00
|
|
|
increment-counter a, 1
|
2016-09-17 07:43:13 +00:00
|
|
|
b-value:num <- increment-counter b, 2
|
|
|
|
a-value:num <- increment-counter a, 1
|
2015-05-06 04:17:24 +00:00
|
|
|
# check results
|
2016-03-08 09:30:14 +00:00
|
|
|
$print [Contents of counters], 10/newline
|
2017-09-19 06:23:29 +00:00
|
|
|
$print [a: ], a-value, [ b: ], b-value, 10/newline
|
2015-05-06 04:17:24 +00:00
|
|
|
]
|