compiler.let_(bindings, expr)
compiler.letfn_(bindings, expr)
compiler.letrec_(bindings, expr)
compiler.named_let(n, bindings, expr)
      Return the intermediate language code required to evaluate body in the context established by bindings.
      Bindings must be a list of two-element lists that map symbolic identifiers to values.
eval(compiler.letfn_([['a, 1], ['b, 2]], compiler.call('list, ['a, 'b])))
// [1, 2]
eval(compiler.let_([['a, 1], ['b, 'a]], compiler.call('list, ['a, 'b])))
// [1, 1]
/* generate and evaluate the code below:
letfn iter (i = 0)
  when (i < 5)
  { showln(i)
    iter(inc(i)) }
*/            
eval(compiler.named_let('iter, [['i, 0]],
      compiler.when_(compiler.call('`<`, ['i, 5]),
        compiler.block([compiler.call('showln, ['i]),
                        compiler.call('iter, [compiler.call('inc, ['i])])]))))
//> 0
    1
    2               
    3
    4