आपको अब तक कुछ अच्छे उत्तर मिले हैं; मुझे आप एक अव्यवहारिक लेकिन अत्यधिक शैक्षिक उदाहरण देते हैं कि आप कैसे ढेर या "नियंत्रण प्रवाह" की धारणा के बिना एक भाषा डिजाइन कर सकते हैं। यहां एक ऐसा कार्यक्रम है, जो वास्तविकताओं को निर्धारित करता है:
function f(i) => if i == 0 then 1 else i * f(i - 1)
let x = f(3)
हम इस प्रोग्राम को एक स्ट्रिंग में रखते हैं, और हम टेक्स्ट के प्रतिस्थापन द्वारा प्रोग्राम का मूल्यांकन करते हैं। इसलिए जब हम मूल्यांकन कर रहे होते हैं f(3)
, हम एक खोज करते हैं और 3 को i के साथ प्रतिस्थापित करते हैं, जैसे:
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)
महान। अब हम एक और शाब्दिक प्रतिस्थापन करते हैं: हम देखते हैं कि "if" की स्थिति झूठी है और प्रोग्राम को प्रोड्यूस करते हुए एक और स्ट्रिंग को प्रतिस्थापित करते हैं:
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
और हमें किया जाएगा।
हम स्थानीय चर और निरंतरता की जानकारी के लिए पारंपरिक रूप से स्टैक का उपयोग करते हैं; याद रखें, एक स्टैक आपको यह नहीं बताता है कि आप कहां से आए हैं, यह आपको बताता है कि आप हाथ में उस वापसी मूल्य के साथ कहां जा रहे हैं।
प्रोग्रामिंग के स्ट्रिंग प्रतिस्थापन मॉडल में, स्टैक पर कोई "स्थानीय चर" नहीं हैं; औपचारिक पैरामीटर को उनके मूल्यों के लिए प्रतिस्थापित किया जाता है जब फ़ंक्शन को इसके तर्क पर लागू किया जाता है, बजाय स्टैक पर एक लुकअप तालिका में डाल दिया जाता है। और कोई "आगे कहीं जा रहा है" नहीं है क्योंकि प्रोग्राम मूल्यांकन केवल एक अलग लेकिन समकक्ष कार्यक्रम का उत्पादन करने के लिए स्ट्रिंग प्रतिस्थापन के लिए सरल नियम लागू कर रहा है।
अब, निश्चित रूप से, वास्तव में स्ट्रिंग प्रतिस्थापन करना संभवतः जाने का रास्ता नहीं है। लेकिन प्रोग्रामिंग भाषाएं जो "समान तर्क" (जैसे हास्केल) का समर्थन करती हैं, तार्किक रूप से इस तकनीक का उपयोग कर रही हैं ।