Posted to tcl by Poor Yorick at Fri Sep 12 02:08:54 GMT 2014view raw
- 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} }