উইকিপিডিয়ায় বর্ণিত 'ট্রাম্পোলিন' এর এলআইএসপি অনুভূতিও রয়েছে:
কিছু এলআইএসপি বাস্তবায়নে ব্যবহৃত হয়, ট্রামপোলিন এমন একটি লুপ যা পুনরাবৃত্তভাবে থাঙ্ক-রিটার্নিং ফাংশনকে অনুরোধ করে। একটি প্রোগ্রামের সমস্ত নিয়ন্ত্রণ স্থানান্তর প্রকাশের জন্য একটি একক ট্রাম্পোলিনই যথেষ্ট; প্রকাশিত একটি প্রোগ্রাম ট্রাম্পোলিন বা "ট্রাম্পোলিনযুক্ত শৈলীতে"; ট্রাম্পোলিন শৈলীতে একটি প্রোগ্রাম রূপান্তর ট্রাম্পোলাইনিং। ট্রাম্পোলিনযুক্ত ফাংশনগুলি স্ট্যাক-ওরিয়েন্টেড ভাষায় লেজ পুনরাবৃত্তির ফাংশন কলগুলি প্রয়োগ করতে ব্যবহার করা যেতে পারে
আসুন আমরা বলি যে আমরা জাভাস্ক্রিপ্টটি ব্যবহার করছি এবং ধারাবাহিকতা-পাসিং-স্টাইলে নির্দোষ ফিবোনাচি ফাংশন লিখতে চাই। যে কারণে আমরা এটি করব তা প্রাসঙ্গিক নয় - উদাহরণস্বরূপ জেএসকে স্কিম বন্দর করা, বা সিপিএসের সাথে খেলতে যা আমাদের যেকোনোভাবে সার্ভার-সাইড ফাংশনগুলি কল করতে ব্যবহার করতে হবে।
সুতরাং, প্রথম প্রচেষ্টা হয়
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]});
}