Posted to tcl by kbk at Sun Jul 13 19:30:16 GMT 2008view pretty

puts [U [lambda {foldl base op list} {
    if {[llength $list] == 0} {
	I $base
    } else {
	tailcall U $foldl \
	    [{*}$op $base [lindex $list 0]] \
	    $op \
	    [lrange $list 1 end]
    }
}] \
	  {0 1} \
	  [lambda {p q} {
	      list [+ [lindex $p 0] $q] \
		  [* [lindex $p 1] $q]}] \
	  {1 2 3 4 5}]