tailcall

NAME
SYNOPSIS
DESCRIPTION
EXAMPLE
SEE ALSO
KEYWORDS


______________________________________________________________________________

NAME

tailcall − Replace the current procedure with another command

SYNOPSIS

tailcall command ?arg …? ______________________________________________________________________________

DESCRIPTION

The tailcall command replaces the currently executing procedure, lambda application, or method with another command. The command, which will have arg … passed as arguments if they are supplied, will be looked up in the current namespace context, not in the caller’s. Apart from that difference in resolution, it is equivalent to:

return [uplevel 1 [list command ?arg …?]]

This command may not be invoked from within an uplevel into a procedure or inside a catch inside a procedure or lambda.

EXAMPLE

Compute the factorial of a number.

proc factorial {n {accum 1}} {
if {$n < 2} {
return $accum
}
tailcall
factorial [expr {$n – 1}] [expr {$accum bodies manpages.csv script_extrae_body.sh script.sh usr $n}]
}

Print the elements of a list with alternating lines having different indentations.

proc printList {theList} {
if {[llength $theList]} {
puts “> [lindex $theList 0]”
tailcall
printList2 [lrange $theList 1 end]
}
}
proc printList2 {theList} {
if {[llength $theList]} {
puts “< [lindex $theList 0]"
tailcall
printList [lrange $theList 1 end]
}
}

SEE ALSO

apply(n), proc(n), uplevel(n)

KEYWORDS

call, recursion, tail recursion