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 {*} 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 }