Richard Suchenwirth 2005-04-09 - A trampoline is a software device to repeatedly call some code until a terminal condition is met. It can give the effect of recursion without consuming much stack. Slightly rewritten from Playing TRAC, here is a simple trampoline:
proc trampoline form { while 1 { set new [subst $form] if {$new eq $form} break set form $new } set form }
#-- Testing with the classic factorial - either constant 1 is returned, or a bracketed expression for the next trampoline jump:
proc fac n { expr {$n<=1? 1: "\[expr $n * \[fac [incr n -1]]]"} } % fac 5 [expr 5 * [fac 4]] % trampoline {[fac 5]} 120
In the dialect developed in Playing TRAC, factorial looks like this:
DS fac {[GR $1 1 "\[ML $1 \[CL fac [SU $1 1]]]" 1]}
The structural similarity should be evident.
See also Tail call optimization | Tail call optimisation (both have their merits :)