fn id {ret $0} fn dbl {+ $0 $0} fn do {body while cond} { eval $body 1 while $cond {eval $body 1} } [fn {+ $0 $0}] 1 # reason for two syntaxes: when passing {...block...} to fn # and it wants to pass args # it can do this by doing: fn $var 1 (1 is like in eval, tcl's uplevel) [fn {{x y} + $x $y}] 1 2 [fn {x y} {+ $x $y}] 1 2