Weitere Beispiele werden automatisch zu den Stichwörtern zugeordnet - wir garantieren ihre Korrektheit nicht.
There is also a statement that performs a tail call.
This is of course an example of tail call optimization.
Escape continuations can also be used to implement tail call elimination.
However, not all tail calls are necessarily located at the syntactical end of a subroutine.
However, in practice this rewriting depends on tail call elimination, which is not a feature of all languages.
Tail call elimination replaces the last two lines with a single jump instruction:
Tail calls are significant because they can be implemented without adding a new stack frame to the call stack.
In general, a function that calls itself with a tail call can be optimized, but mutually recursive functions cannot.
A tail call can be located just before the syntactical end of a subroutine:
The language specification of Scheme requires that tail calls are to be optimized so as not to grow the stack.
Below is a version of the same algorithm using explicit iteration, suitable for a language that does not eliminate tail calls.
Like all implementations in the Scheme family, Racket implements full tail call elimination.
Traditionally, tail call elimination is optional.
If an implementation uses tail call optimization (usually required for functional languages), objects may also be seen as escaping to called subroutines.
SKILL supports tail call optimization, if it is explicitly enabled.
Tail calls can be made explicitly in Perl, with a variant of the "goto" statement that takes a function name:
When interrupts occur back-to-back, microcontrollers may avoid an extra context save/restore cycle by a form of tail call optimization.
Functional programming languages commonly provide tail call optimization to allow for extensive use of recursion without stack overflow problems.
Functional programming languages tend to rely on tail call optimization and higher-order functions instead of imperative looping constructs.
Note that in CPS, there is no implicit continuation-every call is a tail call.
In particular, the tail call optimizations discussed by Steele turned the procedure into a credible way of implementing iteration through tail recursion.
Limitations in Java bytecode complicate tail call optimization on the JVM.
Tail call elimination is thus required by the standard definitions of some programming languages, such as Scheme, and languages in the ML family among others.
Tail-recursive functions are functions in which all recursive calls are tail calls and hence do not build up any deferred operations.
In any language which supports closures and proper tail calls, it is possible to write programs in continuation-passing style and manually implement call/cc.