As of tcl8.5, Tcl has native support for [lambda], provided by means of [apply] per [TIP] 194 [http://www.tcl.tk/cgi-bin/tct/tip/194]. The [apply] command is documented here http://www.tcl.tk/man/tcl8.5/TclCmd/apply.htm This enables the following: proc lambda {arglist body {ns {}}} { list ::apply [list $arglist $body $ns] } An example of its use: set q [lambda {x} {incr x}] {*}$q 1 % 2 The significant thing here is that (in the above example) $q will contain an anonymous proc which will byte compile itself. So subsequent invocations of {*}$q will '''not''' incur a recompilation. The anonymous proc will persist as long as it's not shimmered away, and can be passed around as a value! This is ubercool - guilt-free [lambda]. [NEM] notes also that in many places where lambdas are useful, the explicit [{*}] is not necessary -- e.g. most commands which accept callbacks will automatically expand the command anyway: % lsort -command [lambda {x y} { expr {[string length $x] < [string length $y]} }] "My name is Neil" name Neil My is % trace add variable ::foo write [lambda args { puts "foo = $::foo" }] % set foo 12 foo = 12 12 ---- ([pmarin]). scheme like define: proc def { _name arglist body {ns {}} } { upvar $_name name set name [list ::apply [list $arglist $body $ns]] } ---- [[ [Category Example] ]]