Posted to tcl by Poor Yorick at Fri Sep 12 02:08:54 GMT 2014view pretty
variable knittemplate { set body [string map @map@ @template@] tailcall eval $body } proc knit {name varnames body} { set proc [uplevel [ list [namespace current]::knitbuild $name $varnames $body]] uplevel $proc } proc knitbuild {name varnames body} { variable knittemplate foreach varname $varnames { lappend mapparts [string map [list @varname@ [list $varname]] \ {\${@varname@} "\[lindex [list [set @varname@]]]" #{@varname@} [set @varname@]}] } set map [string map [ list @mapparts@ [join $mapparts { }]] {[list @mapparts@]}] set body [string map [list @map@ $map @template@ [ list $body]] $knittemplate] list proc $name $varnames $body } set a 0 until {$a == 10} {puts {needs more a}; incr a}
Comments
Posted by Poor Yorick at Fri Sep 12 02:09:49 GMT 2014 [text] [code]
knit until {expr body} { while {!(#{expr})} ${body} }