Posted to tcl by kbk at Fri Jun 12 20:20:55 GMT 2009view pretty

namespace path ::tcl::mathop
proc fib {n {c {{x} {set x}}}} {
    while {$n >= 2} {
	set c [list [list x [list n $n] [list c $c]] {
	    tailcall fib [- $n 2] [list [list y [list x $x] [list c $c]] {
		tailcall apply $c [+ $x $y]
	    }]
	}]
	incr n -1
    }
    tailcall apply $c $n
}
for {set i 0} {$i <= 10} {incr i} {
    puts [fib $i]
}