También existe el sentido de LISP 'trampolín' como se describe en la Wikipedia:
Se utiliza en algunas implementaciones de LISP, un trampolín es un bucle que forma iterativa invoca thunk-volviendo funciones. Un solo trampolín es suficiente para expresar todas las transferencias de control de un programa ; un programa así expresado es trampolín o en "estilo trampolín"; convirtiendo un programa en trampolín estilo es trampolín. Trampolined funciones pueden utilizarse para aplicar la cola función recursiva se llama en lenguajes orientados a pila-
Digamos que estamos utilizando Javascript y queremos escribir la función de Fibonacci ingenua en que pasa al estilo de continuación. La razón por la que haríamos esto no es relevante: portar Scheme a JS, por ejemplo, o jugar con CPS, que debemos usar de todos modos para llamar a las funciones del lado del servidor.
Así, el primer intento es
function fibcps(n, c) {
if (n <= 1) {
c(n);
} else {
fibcps(n - 1, function (x) {
fibcps(n - 2, function (y) {
c(x + y)
})
});
}
}
embargo, la ejecución de este con n = 25
en Firefox da un error 'Demasiado recursividad!'. Este es exactamente el problema (falta de optimización de la llamada de la cola en Javascript) que soluciona el trampolín. En lugar de realizar una llamada (recursiva) a una función, déjenos return
una instrucción (thunk) para llamar a esa función, para que se interprete en un bucle.
function fibt(n, c) {
function trampoline(x) {
while (x && x.func) {
x = x.func.apply(null, x.args);
}
}
function fibtramp(n, c) {
if (n <= 1) {
return {func: c, args: [n]};
} else {
return {
func: fibtramp,
args: [n - 1,
function (x) {
return {
func: fibtramp,
args: [n - 2, function (y) {
return {func: c, args: [x + y]}
}]
}
}
]
}
}
}
trampoline({func: fibtramp, args: [n, c]});
}
[Relacionados] (http://stackoverflow.com/questions/2420346/c-api -function-callbacks-into-c-member-function-code) – bobobobo
Básicamente es la forma generalizada de alguna funcionalidad que podría implementarse con setjmp/lomgjmp, es decir, para evitar el flujo de la pila. – Ingo
¿por qué alguien querría evitar Stackoverflow? – Mangostaniko