আপনি এখনও পর্যন্ত কিছু ভাল উত্তর পেয়েছেন; আমাকে কীভাবে কোনও স্ট্যাকের ধারণা বা "নিয়ন্ত্রণ প্রবাহ" এর ধারণা ছাড়াই আপনি কোনও ভাষা ডিজাইন করতে পারেন তার একটি অযৌক্তিক কিন্তু উচ্চ শিক্ষামূলক উদাহরণ দেই। ফ্যাকটোরিয়ালগুলি নির্ধারণ করে এমন একটি প্রোগ্রাম এখানে রয়েছে:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = f(3)
আমরা এই প্রোগ্রামটিকে একটি স্ট্রিংয়ে রেখেছি এবং আমরা পাঠ্য প্রতিস্থাপনের মাধ্যমে প্রোগ্রামটি মূল্যায়ন করি। সুতরাং যখন আমরা মূল্যায়ন করি f(3)
, আমরা একটি অনুসন্ধান করি এবং আমার জন্য 3 এর সাথে প্রতিস্থাপন করি:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = if 3 == 0 then 1 else 3 * f(3 - 1)
গ্রেট। এখন আমরা অন্য একটি পাঠ্য প্রতিস্থাপন সম্পাদন করি: আমরা দেখতে পাই যে "যদি" এর শর্তটি মিথ্যা এবং প্রোগ্রামটি উত্পাদন করে অন্য স্ট্রিং প্রতিস্থাপন করে:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = 3 * f(3 - 1)
ধ্রুবকগুলি জড়িত সমস্ত উপ-এক্সপ্রেশনগুলিতে এখন আমরা অন্য স্ট্রিং প্রতিস্থাপন করি:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = 3 * f(2)
এবং আপনি দেখতে কিভাবে এটি যায়; আমি আর বিন্দু শ্রম করব না। আমরা নীচে না নামা পর্যন্ত let x = 6
এবং আমাদের কাজ শেষ না হওয়া পর্যন্ত আমরা ধারাবাহিক স্ট্রিং বিকল্পগুলির একটি ধারাবাহিক কাজ চালিয়ে যেতে পারতাম ।
আমরা স্থানীয় ভেরিয়েবল এবং ধারাবাহিকতার তথ্যের জন্য স্ট্যাকটি traditionতিহ্যগতভাবে ব্যবহার করি; মনে রাখবেন, একটি স্ট্যাক আপনাকে জানায় না আপনি কোথা থেকে এসেছেন, এটি আপনাকে জানায় যে সেই রিটার্ন মানটি হাতে রেখে আপনি কোথায় যাচ্ছেন।
প্রোগ্রামিংয়ের স্ট্রিং প্রতিস্থাপনের মডেলগুলিতে, স্ট্যাকটিতে কোনও "স্থানীয় ভেরিয়েবল" নেই; আনুষ্ঠানিক পরামিতিগুলি তাদের মানগুলির জন্য প্রতিস্থাপিত হয় যখন ফাংশনটি তার আর্গুমেন্টে প্রয়োগ করা হয়, বরং স্ট্যাকের দিকে তাকানোর টেবিলে রাখে। এবং "পরবর্তী কোথাও যেতে হবে" কারণ প্রোগ্রাম মূল্যায়ন কেবল স্ট্রিং প্রতিস্থাপনের জন্য একটি ভিন্ন তবে সমমানের প্রোগ্রাম তৈরির জন্য সহজ নিয়ম প্রয়োগ করে।
এখন, অবশ্যই, স্ট্রিং বিকল্পগুলি করা সম্ভবত যাওয়ার উপায় নয়। তবে প্রোগ্রামিং ভাষাগুলি যা "সমীকরণ যুক্তি" সমর্থন করে (যেমন হাস্কেল) যুক্তিযুক্তভাবে এই কৌশলটি ব্যবহার করছে।