Há também o sentido LISP de 'trampolim', conforme descrito na Wikipedia:
Usado em algumas implementações LISP, um trampolim é um loop que invoca funções de retorno de conversão de forma iterativa. Um único trampolim é suficiente para expressar todas as transferências de controle de um programa; um programa assim expresso é trampolim ou em "estilo trampolim"; converter um programa para o estilo trampolim é trampolim. Funções trampolinhadas podem ser usadas para implementar chamadas de função recursiva final em linguagens orientadas a pilha
Digamos que estejamos usando Javascript e queremos escrever a função Fibonacci ingênua no estilo continuation-pass. A razão pela qual faríamos isso não é relevante - para portar Scheme para JS, por exemplo, ou para brincar com CPS que temos que usar de qualquer maneira para chamar funções do lado do servidor.
Então, a primeira tentativa é
function fibcps(n, c) {
if (n <= 1) {
c(n);
} else {
fibcps(n - 1, function (x) {
fibcps(n - 2, function (y) {
c(x + y)
})
});
}
}
Mas, ao executá-lo n = 25no Firefox, aparecerá um erro 'Muita recursão!'. Bem, este é exatamente o problema (falta de otimização de chamada de cauda em Javascript) que o trampolim resolve. Em vez de fazer uma chamada (recursiva) para uma função, vamos returnusar uma instrução (thunk) para chamar essa função, para ser interpretada em um loop.
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]});
}