You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
1.2 KiB
28 lines
1.2 KiB
|
|
#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]]] |
|
} |
|
}
|
|
|