# example program: maintain multiple counters with isolated lexical scopes # (spaces) recipe new-counter [ default-space:address:array:location <- new location:type, 30 n:number <- next-ingredient reply default-space ] recipe increment-counter [ local-scope 0:address:array:location/names:new-counter <- next-ingredient # setup outer space; it *must* come from 'new-counter' x:number <- next-ingredient n:number/space:1 <- add n:number/space:1, x reply n:number/space:1 ] recipe main [ local-scope # counter A a:address:array:location <- new-counter 34 # counter B b:address:array:location <- new-counter 23 # increment both by 2 but in different ways increment-counter a, 1 b-value:number <- increment-counter b, 2 a-value:number <- increment-counter a, 1 # check results $print [Contents of counters ] # trailing space in next line is to help with syntax highlighting $print [a: ], a-value, [ b: ], b-value, [ ] ]