Originated by [PeterLewerin] 2014-09-08. ====== package require Tcl 8.5 proc lmap args { set body [lindex $args end] set args [lrange $args 0 end-1] set n 0 set pairs [list] foreach {varname listval} $args { upvar 1 $varname var$n lappend pairs var$n $listval incr n } set temp [list] foreach {*}$pairs { lappend temp [uplevel 1 $body] } set temp } ====== The above command uses the `[{*}]` [bracestarbrace%|%thingy%|%], so it's still no good for Tcl 8.4 users: one more implementation is perhaps needed. ====== package require Tcl 8.4 proc lmap args { set body [lindex $args end] set args [lrange $args 0 end-1] set n 0 set pairs [list] foreach {varname listval} $args { upvar 1 $varname var$n lappend pairs var$n $listval incr n } set temp [list] eval foreach $pairs [list { lappend temp [uplevel 1 $body] }] set temp } ====== <>Porting