fn id {ret $0} fn dbl {ret [+ $0 $0]} fn do {body while cond} { eval $body 1 while $cond {eval $body 1} } call [fn {ret [+ $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) call [fn {{x y} ret [+ $x $y]}] 1 2 call [fn {x y} {ret [+ $x $y]}] 1 2