# Pure Tcl implementation of TIP 187 (Procedures as Values) # Copyright(C) 2004 Salvatore Sanfilippo # Under the Same license as Tcl8.4 namespace eval tip187 {set counter 0} rename unknown tip187::unknown proc unknown args { set func [lindex $args 0] set funcargs [lrange $args 1 end] if {[llength $func] == 3 && [lindex $func 0] eq {lambda}} { set c [incr ::tip187::counter] set t [list proc ::tip187::lambda$c [lindex $func 1] [lindex $func 2]] if {![catch {uplevel $t}]} { set retval [uplevel ::tip187::lambda$c $funcargs] rename ::tip187::lambda$c {} return $retval } catch {rename ::tip187::lambda$c {}} } else { uplevel ::funcval::unknown $args } } proc lambda {arglist body} { list lambda $arglist $body }