#NOT really very lazy.. #pipealias lazy .=>. {inspect "$h|$t"} |> {list $h [list lazy $name $t]} |r,fn/1> {upvar $name nm; pipeset nm .= {*}$fn} |> {lindex $r 0} <h/1/anyhead,t/1/anytail,name@0| pipealias lazy .=>. {list $h [list lazy $name $t]} |r,fn/1> {upvar $name nm; pipeset nm .= {*}$fn} |> {lindex $r 0} <h/1/anyhead,t/1/anytail,name@0| pipealias lazyfun =infun>0 |a/0/0,b/0/1,c/0/2> {list $a $b [list init {*}$c]} |> .=* |> inspect |h> {pipealias $name .= eval \$$name} |> {set name} <infun/0,name/0/1,'lazy'/@0/0| lazyfun {lazy j {a b c d e}} #pipealias listgen = |h/0,fn/1> {upvar $name nm; pipeset nm .= {*}$fn} |> {set h} <l@1,name@0| #NOTE that not all functional languages seem to make use of cons cells - and they are arguably not required and/or not the right approach for Tcl(?) #standard lists are likely to be more efficient. # proc cons {a b} {list $a $b} proc car {p} {lindex $p 0} proc cdr {p} {lindex $p 1} # "cons cell" structure (a specific type of linked-list) proc LIST args { if {![llength $args]} { return {} } else { return [cons [lindex $args 0] [LIST {*}[lrange $args 1 end]]] } }