Counting is a language invented by User:A whose control flow only contains When blocks. The only mutable values is the instruction count and the accumulator. The instruction count increments after every executed when block (skipped blocks aren't counted) and starts at 0. It cannot be assigned. (The counter is incremented every time before the execution of the when block.)
The accumulator, initialized at 0, can only be added by the (potentially processed) instruction count. The accumulator cannot be subtracted or assigned by the instruction count, and so on.
Even if none of the conditions are fullfilled, the language continues to execute without stopping, as well as incrementing the counter by 1. You can use
halt to stop the program.
Example (Infinite counter)
when cnt > 0 out cnt
Range from 2 to 100.
when cnt > 100 halt when cnt > 2 out cnt
Count up with a step of 2, starting with 2.
when cnt % 3 == 2 acc += cnt out acc
Digital root calculator
when cnt - 1 == 1 + (acc - 1) % 9 out cnt - 1 halt
Line-based cat program
when 1 read acc out acc
when 1 out "Hello, World!" halt
when cnt == 1 read acc out acc when acc == 0 halt when acc == 1 out acc
Swap() is in pseudo-code ...
when cnt == acc - cnt out acc acc += cnt acc += cnt when cnt < acc - cnt % Pass. when cnt == acc - cnt acc += 0 - cnt
Add Two Numbers
when cnt == 0 read acc when cnt == acc read acc out acc + cnt halt
Outputs in unary.
when cnt == 0 read acc when cnt < acc out "*" * cnt % 1 + 2 + ... + acc
when cnt == 0 read acc when cnt < acc acc += 0 - acc + acc * cnt print acc