क्षमा करें यदि चर्चा भाई थोड़ा अस्पष्ट प्रतीत हो सकता है, लेकिन कहने के लिए बहुत कुछ है।
मेरे पास लिस्प के केवल सैद्धांतिक ज्ञान है, हाथ नहीं।
दूसरी तरफ, फर्थ के पास भाषा के अंदर एक पूर्ण मेटाप्रोग्रामिंग हो सकती है (लेकिन सामान्य फर्थ नहीं है)। लेकिन मेटाप्रोग्रामिंग पर विचार किया जा सकता है और संभव है लेकिन एक सुसंगत वाक्यविन्यास के बिना। मुझे लगता है कि लिस्प में भी ऐसा ही होता है।
मैंने एक बहुत ही साफ समाधान लागू किया है जिसमें भाषा की तरह फर्थ के एक छोटे प्रतिमान में संभावना शामिल है। मेटाप्रोग्रामिंग करने के लिए हमें जो भी लिखना है उसका उल्लेख करने में सक्षम होना चाहिए। तो जब हम एक प्रोग्राम लिखने के रूप में immediatelly निष्पादित करने के लिए:
bread eat
हम इसे क्रियान्वित इसे बाद में संदर्भ के लिए रखने के लिए के बजाय इरादे के साथ एक ही वाक्यांश का उल्लेख करने के लिए भी सक्षम होना चाहिए। यह लेखन किया जा सकता है उदा।
{ bread eat }
ऊपर दिए गए वाक्यांश को बनाए गए ऑब्जेक्ट को ढेर पर छोड़ने के परिणामस्वरूप हो सकता है। लेकिन जैसा कि हमने {
और }
के रूप में एक नया शब्द बनाया है, हमें इसका भी संदर्भ देने का अधिकार है।
तो, हम का उल्लेख करना चाहते हो सकता है:
{ bread
हम चाहते हैं कि कैसे जानकारी दे सकती है? एक टेंटेटिव वाक्यविन्यास है: {{ { bread }}
।
अगर हम पिछले वाक्यांश के लिए नाम XXX
देना हम के रूप में प्रारंभिक वाक्यांश लिख सकते हैं:
XXX eat }
और वाक्यांश ऊपर सही ढंग से ढेर
{ bread eat }
के रूप में पर छोड़ने में काम करना चाहिए मुझे नहीं पता कि मैं जो कहता हूं वह वही है जो आप खोज रहे हैं, यह कहने के लिए पर्याप्त है कि उपर्युक्त तर्क और फर्थ के अंदर उनके कार्यान्वयन से प्रत्येक शब्द को निष्पादन स्तर मिलता है और यह परिभाषित करता है कि शब्द के मेटाप्रोग्रामिंग का स्तर कौन सा है।
जाहिर है, हमारे पास पहला अनंत स्तर और प्रत्येक क्रमिक स्तर है। तो निष्पादन स्तर गणितीय अनंत पर आधारित हैं।
मैंने उपरोक्त को एक प्रकार के फर्थ के अंदर लागू किया है और पहले स्तर पर (अनंत अनंतता) सब कुछ सुचारू रूप से काम करता है।
में
{ bread eat } { tomatos eat } x 3 = if
:: तो उदाहरण के लिए एक बजे सक्षम की वाक्य रचना को बदलने के लिए
{ bread eat | tomatos eat } x 3 = if
को परिभाषित द्वारा किया जाता है यही कारण है कि |
} {
के रूप में के रूप में bellow:
{{ } { }} "|" define
या आप की तरह है, तो यह बेहतर है:
2{ } { 2} "|" define
ऊपर दी गई विधि मेटा भाषा के सही वाक्यविन्यास के साथ भाषा के अंदर ले जाती है और इसे भाषा बनाती है।
तो मेरी राय में, लिस्प और फर्थ दोनों में मेटाप्रोग्रामिंग की संभावना है, लेकिन दोनों में भाषा के एक एकीकृत हिस्से के रूप में संभावना की कमी है।
मेरे पास napl.wikispaces.com पर अधिक जानकारी है।
यह पिछले संस्करण की तुलना में अधिक विशिष्ट है, [लिस्प और फर्थ मैक्रोज़ \ [पकड़ पर]] (http://stackoverflow.com/q/24272856/1281433), जो अच्छा है।बेशक, अब * उस प्रश्न ने वोट दोबारा खोल दिए हैं, और इसका एक करीबी वोट है, इसलिए इसमें कुछ भ्रम है कि इनमें से कौन सा वास्तव में खुला रहता है। यह बहुत स्पष्ट आप इस प्रश्न में जो खोज रहे हैं, लेकिन यह अभी भी शायद विषय से दूर है, क्योंकि [ "तुलना प्रश्न के लिए \ [स्टैक ओवरफ़्लो \] एक गरीब फिट हैं, क्योंकि वहाँ उत्तर देने के लिए कोई सीमा नहीं है जो करने के लिए तैनात किया जा सकता है उन्हें। "] (http://meta.stackoverflow.com/q/251328/1281433)। –
निकटतम कारण ** बहुत व्यापक ** यहां लागू होता है: "या तो * बहुत सारे संभावित उत्तर * हैं, या अच्छे प्रारूप इस प्रारूप के लिए बहुत लंबे समय तक होंगे।" यह ** ** खराब ** प्रश्न नहीं है; यह सिर्फ स्टैक ओवरफ़्लो के लिए विशेष रूप से अच्छा फिट नहीं है। उदाहरण के लिए, comp.lang.lisp में यह प्रश्न बहुत अच्छा हो सकता है। –
विशेष subquestion, "वहाँ कुछ आप पूर्व जो आप बाद? या उपाध्यक्ष प्रतिकूल के साथ ऐसा नहीं कर सकते के साथ कर सकते है?" शायद यहां सबसे विशिष्ट है। यह अभी भी बहुत सारे उत्तरों को स्वीकार कर सकता है, लेकिन यदि ऐसा कुछ है जो कोई ऐसा कर सकता है जो दूसरे नहीं कर सकता है, तो संभवतः अपेक्षाकृत कैनोलिक जवाब देना संभव है। –