proc swap {_a _b} { upvar 1 $_a a upvar 1 $_b b foreach a $b b $a {} }
proc each {ls script} { for {set i 0} {$i<[llength $ls]} {incr i} { uplevel 1 $script } }
proc until {cond script} { tailcall while "!($cond)" $script }