$head {$cons {set p} {set q}}   
This is now the way one would invoke a lambda expression
-> {lambda c {$c {lambda {x y} {$x}}}} {$cons {set p} {set q}}
Tcl interpreter does variable substitution
-> lambda c {$c {lambda {x y} {$x}}} {$cons {set p} {set q}}
unknown pops the first list item
-> {$cons {set p} {set q}} {lambda {x y} {$x}}
lambda proc curries and reduces
-> $cons {set p} {set q} {lambda {x y} {$x}}
(Tcl evaluation and) popping by the unknown proc
-> lambda {a b f} {$f $a $b} {set p} {set q} {lambda {x y} {$x}}
Tcl substitution and pop by unknown
-> {lambda {x y} {$x}} {set p} {set q}
lambda proc curries and reduces
-> lambda {x y} {$x} {set p} {set q}   
(Tcl evaluation and) pop by unknown proc
->{set p}
lambda proc curries and reduces
->p
(Tcl evaluation,) pop by unkown and evaluation of set (p has value p)