Ada juga pengertian LISP dari 'trampolin' seperti yang dijelaskan di Wikipedia:
Digunakan dalam beberapa implementasi LISP, trampolin adalah loop yang secara berulang memanggil fungsi penghasil thunk. Sebuah trampolin tunggal cukup untuk mengekspresikan semua transfer kendali suatu program; sebuah program yang diekspresikan dengan cara diinjak-injak atau dalam "gaya trampolin"; mengubah program menjadi gaya trampolin adalah trampolin. Fungsi trampolin dapat digunakan untuk mengimplementasikan panggilan fungsi rekursif ekor dalam bahasa berorientasi stack
Misalkan kita menggunakan Javascript dan ingin menulis fungsi Fibonacci yang naif dalam gaya penerusan-lanjutan. Alasan kami melakukan ini tidak relevan - untuk mem-port Scheme ke JS misalnya, atau untuk bermain dengan CPS yang tetap harus kami gunakan untuk memanggil fungsi sisi server.
Jadi, upaya pertama adalah
function fibcps(n, c) {
if (n <= 1) {
c(n);
} else {
fibcps(n - 1, function (x) {
fibcps(n - 2, function (y) {
c(x + y)
})
});
}
}
Tapi, menjalankan ini dengan n = 25
di Firefox memberikan kesalahan 'Rekursi terlalu banyak!'. Sekarang inilah sebenarnya masalah (tidak adanya optimasi panggilan-ekor dalam Javascript) yang dipecahkan oleh trampolin. Alih-alih membuat panggilan (rekursif) ke suatu fungsi, mari kita return
gunakan instruksi (thunk) untuk memanggil fungsi itu, untuk diinterpretasikan dalam satu putaran.
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]});
}