-x       y n n n n n n n n n n n n n n n
`x       n y n n n n n n n n n n n n n n
!!x      n n y n n n n n n n n n n n n n
x*       n n n n y n n n n n n n n n n n
x + y    n n n n n y n n n n n n n n n n
x = y    n n n n n n y n n n n n n n n n
x => y   n n n n n n n y n n n n n n n n
x.y      n n n n n n n n y n n n n n n n
{ }      n n n n n n n n n n y n n n n n
3        n n n n n n n n n n n n y n n n
[]       n n n n n n n n n n n y n n n n
x[y]     n n n n n n n n n n n n n n y n
x(y, z)  n n n n n n n n n n n n n n n y
  1  print_func(func:Function) = printf('%s =\n  %s\n', func, func.expr())
  2  tester(test:Expr):map:dynamic_scope = printf("%s .. %s\n", test, eval(test)):nomap
  3  
  4  lambda {
  5  	shortBool(flag:boolean) = chooseif(flag, "y", "n")
  6  	for (expr in [`(-x), `(`x), `(!!x), `(x*), `(x + y), `(x = y),
  7  	              `(x => y), `(x::y), `{}, `3, `[], `x[y], `x(y, z)]) {
  8  		printf("%-8s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", to_string(expr),
  9  				shortBool(expr.is_unaryop()),
 10  				shortBool(expr.is_quote()),
  1  print_func(func:Function) = printf('%s =\n  %s\n', func, func.expr())
  2  tester(test:Expr):map:dynamic_scope = printf("%s .. %s\n", test, eval(test)):nomap
  3  
  4  lambda {
  5  	shortBool(flag:boolean) = chooseif(flag, "y", "n")
  6  	for (expr in [`(-x), `(`x), `(!!x), `(x*), `(x + y), `(x = y),
  7  	              `(x => y), `(x::y), `{}, `3, `[], `x[y], `x(y, z)]) {
  8  		printf("%-8s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", to_string(expr),
  9  				shortBool(expr.is_unaryop()),
 10  				shortBool(expr.is_quote()),
  1  print_func(func:Function) = printf('%s =\n  %s\n', func, func.expr())
  2  tester(test:Expr):map:dynamic_scope = printf("%s .. %s\n", test, eval(test)):nomap
  3  
  4  lambda {
  5  	shortBool(flag:boolean) = chooseif(flag, "y", "n")
  6  	for (expr in [`(-x), `(`x), `(!!x), `(x*), `(x + y), `(x = y),
  7  	              `(x => y), `(x::y), `{}, `3, `[], `x[y], `x(y, z)]) {
  8  		printf("%-8s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", to_string(expr),
  9  				shortBool(expr.is_unaryop()),
 10  				shortBool(expr.is_quote()),
colsPerLines: [69, 82, 0, 8, 51, 63, 68, 83, 33, 31, 31, 32, 32, 34, 32, 36, 31, 36, 31, 32, 31, 32, 33, 32, 2, 3, 8, 23, 17, 48, 3, 2, 3, 8, 23, 32, 28, 38, 2, 3, 8, 41, 53, 34, 2, 3, 8, 41, 81, 49, 3, 8, 41, 11, 48, 64, 2, 48, 3, 8, 71, 16, 16, 26, 10, 17, 3, 2, 9, 24, 38, 19, 3, 11, 39, 19, 3, 11, 17, 37, 31, 3, 23, 4, 3, 8, 32, 17, 21, 17, 2, 33, 43, 36, 25, 10, 62, 20, 17, 3, 8, 18, 21, 24, 10, 15, 3, 2, 18, 5, 30, 3, 8, 23, 16, 54, 2, 54, 3, 8, 80, 63, 14, 24, 28, 3, 8, 44, 48, 30, 3, 2, 20, 11, 47, 3, 8, 28, 17, 25, 11, 22, 3, 2, 47, 39, 10, 3]
lines of test-block.az is 148
c_like_for(`init, `cond, `next):dynamic_scope {block:inside_scope} =
  { env = outers(), env.eval(init), while (env.eval(cond)) { block(), env.eval(next) } }
  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
hello   0
hello   1
hello   2
i = 3
block delegation test
begin    0   1   2 end
   0   1   2   3   4   5   6   7   8   9
a=2, b=3, c=[4, 5, 6]
{ if (block == nil) { println("do nothing") } else { block(x * 2) } }
do nothing
4
f(1, 2, 3) {|a, b, c| return("no problem") } .. no problem
f(n) {block} =
  { s = 0, for (i in (1 .. n)) { s += block(i) }, s }
f(10) {|x| x } .. 55
f(10) {|x| x * x } .. 385
t .. [1, 3, 4, 5, 6]
select_with_index(t) {|x| (x % 2) == 0 } .. [[4, 2], [6, 4]]
fibonacci generation using a block
   0   1   1   2   3   5   8  13  21  34  55  89 144 233 377 610 987
