विकिपीडिया पर वर्णित 'ट्रम्पोलिन' का लिस्प अर्थ भी है:
कुछ एलआईएसपी कार्यान्वयनों में उपयोग किया जाता है, एक ट्रैम्पोलिन एक लूप है जो पुनरावृत्तियां थंक-रिटर्न फ़ंक्शन को लागू करता है। एक एकल trampoline एक कार्यक्रम के सभी नियंत्रण स्थानान्तरण को व्यक्त करने के लिए पर्याप्त है; एक कार्यक्रम जिसे व्यक्त किया गया है, वह trampolined या "trampolined शैली" है; एक कार्यक्रम को परिवर्तित शैली में परिवर्तित करना trampolining है। स्टैम्प-ओरिएंटेड फ़ंक्शन का उपयोग स्टैक-ओरिएंटेड भाषाओं में टेल पुनरावर्ती फ़ंक्शन कॉल को कार्यान्वित करने के लिए किया जा सकता है
हम कहते हैं कि हम जावास्क्रिप्ट का उपयोग कर रहे हैं और निरंतर-गुजर-शैली में भोले फाइबोनैचि फ़ंक्शन लिखना चाहते हैं। उदाहरण के लिए JS को पोर्ट करने के लिए या CPS के साथ खेलने के लिए, जो हमें वैसे भी सर्वर-साइड फ़ंक्शन को कॉल करने के लिए उपयोग करना पड़ता है, यह हम प्रासंगिक नहीं है।
तो, पहला प्रयास है
function fibcps(n, c) {
if (n <= 1) {
c(n);
} else {
fibcps(n - 1, function (x) {
fibcps(n - 2, function (y) {
c(x + y)
})
});
}
}
लेकिन, n = 25
फ़ायरफ़ॉक्स में इसे चलाने से एक त्रुटि 'बहुत अधिक पुनरावृत्ति!' अब यह वास्तव में समस्या है (जावास्क्रिप्ट में टेल-कॉल ऑप्टिमाइज़ेशन गायब) जो कि ट्रम्पोलिनिंग सॉल्व करता है। किसी फ़ंक्शन में एक (पुनरावर्ती) कॉल करने के बजाय, हमें return
उस फ़ंक्शन को कॉल करने के लिए एक निर्देश (थंक) दें, जिसे लूप में व्याख्या किया जाए।
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]});
}