LISP मैक्रोज़ कितनी दूर जा सकते हैं?

मैंने बहुत कुछ पढ़ा है कि LISP फ्लाई पर वाक्यविन्यास को फिर से परिभाषित कर सकता है, संभवतः मैक्रोज़ के साथ। मैं उत्सुक हूं कि यह वास्तव में कितना दूर जाता है? क्या आप भाषा संरचना को फिर से परिभाषित कर सकते हैं कि यह सीमा रेखा किसी अन्य भाषा के लिए एक कंपाइलर बन जाती है? उदाहरण के लिए, क्या आप LISP की कार्यात्मक प्रकृति को अधिक ऑब्जेक्ट ओरिएंटेड सिंटैक्स और सेमेन्टिक्स में बदल सकते हैं, हो सकता है कि रूबी जैसे कुछ सिंटैक्स के करीब हो?

विशेष रूप से, क्या मैक्रोज़ का उपयोग करके संश्लेषण नरक से छुटकारा पाना संभव है? मैंने अपने स्वयं के सूक्ष्म विशेषताओं के साथ Emacs को अनुकूलित करने के लिए पर्याप्त (Emacs-) LISP सीखा है, लेकिन मैं बहुत उत्सुक हूं कि भाषा को अनुकूलित करने में मैक्रोज़ कितने दूर जा सकते हैं।

0
जोड़ा संपादित
विचारों: 1
योजना मैक्रोज़ बहुत शक्तिशाली हैं। मैंने कुछ समय पहले स्कीम मैक्रो के रूप में एक पूर्ण LINQ कार्यान्वयन लिखा था। https://ironscheme.svn.codeplex.com/svn/ IronScheme / IronSchem & zwnj; eConsole / ironscheme / & zwnj; linq.ss इस सब शक्ति के साथ, मैं इसे लागू करने के लिए अच्छे विचारों से बाहर निकल रहा हूं!
जोड़ा लेखक leppie, स्रोत
पीटर Norvig ने एक Prolog Interpreter अपने पुस्तक में।
जोड़ा लेखक Özgür, स्रोत
ध्यान दें कि लिस्प वस्तु उन्मुख है। सामान्य लिस्प ऑब्जेक्ट सिस्टम देखें।
जोड़ा लेखक catphive, स्रोत

7 उत्तर

@sparkes

कभी-कभी LISP स्पष्ट भाषा पसंद है, अर्थात् Emacs एक्सटेंशन। मुझे यकीन है कि अगर मैं चाहता था कि मैं Emacs को विस्तारित करने के लिए रूबी का उपयोग कर सकता हूं, लेकिन Emacs को LISP के साथ विस्तारित करने के लिए डिज़ाइन किया गया था, इसलिए ऐसा लगता है कि उस स्थिति में इसका उपयोग करना समझ में आता है।

0
जोड़ा

यदि आप रुबी का उपयोग रूबी के रूप में दिखाना चाहते हैं।

रुबी (और पायथन) का उपयोग बहुत ही कमजोर तरीके से करना संभव है जो मुख्य कारणों में से एक है जिसे उन्होंने स्वीकृति प्राप्त की है।

0
जोड़ा

यह एक मुश्किल सवाल है। चूंकि लिस्प पहले से ही संरचनात्मक रूप से एक पार्स पेड़ के करीब है, इसलिए बड़ी संख्या में मैक्रोज़ और पार्सर जेनरेटर में अपनी मिनी-भाषा को लागू करने के बीच अंतर बहुत स्पष्ट नहीं है। लेकिन, उद्घाटन और समापन करने वाले माता-पिता को छोड़कर, आप आसानी से कुछ ऐसा कर सकते हैं जो लिप की तरह कुछ नहीं दिखता है।

0
जोड़ा
जोड़ा लेखक p4bl0, स्रोत

नियमित मैक्रोज़ वस्तुओं की सूचियों पर काम करते हैं। आमतौर पर, ये वस्तुएं अन्य सूचियां होती हैं (इस प्रकार पेड़ बनाते हैं) और प्रतीकों, लेकिन वे स्ट्रिंग्स, हैशटेबल, उपयोगकर्ता परिभाषित ऑब्जेक्ट्स आदि जैसे अन्य ऑब्जेक्ट्स हो सकते हैं। इन संरचनाओं को s-exps

इसलिए, जब आप एक स्रोत फ़ाइल लोड करते हैं, तो आपका लिस्प कंपाइलर पाठ को पार्स करेगा और एस-एक्स का उत्पादन करेगा। मैक्रोज़ इन पर काम करते हैं। यह बहुत अच्छा काम करता है और यह एस-एक्सप की भावना के भीतर भाषा का विस्तार करने का एक शानदार तरीका है।

इसके अतिरिक्त, उपर्युक्त पार्सिंग प्रक्रिया को "रीडर मैक्रोज़" के माध्यम से बढ़ाया जा सकता है जो आपको अपने कंपाइलर को एस-एक्सप में बदलने के तरीके को अनुकूलित करने देता है। हालांकि, मैं सुझाव देता हूं कि आप इसे किसी और चीज में झुकाव के बजाय लिस्प के वाक्यविन्यास को गले लगाओ।

जब आप लिस्प की "कार्यात्मक प्रकृति" और रूबी के "ऑब्जेक्ट-उन्मुख वाक्यविन्यास" का जिक्र करते हैं तो आप थोड़ा उलझन में लगते हैं। मुझे यकीन नहीं है कि "ऑब्जेक्ट-ओरिएंटेड सिंटैक्स" क्या माना जाता है, लेकिन लिस्प एक बहु-प्रतिमानी भाषा है और यह ऑब्जेक्ट उन्मुख प्रोग्रामिंग extremelly का समर्थन करता है।

बीटीडब्लू, जब मैं लिस्प कहता हूं, मेरा मतलब है सामान्य लिस्प

मेरा सुझाव है कि आप अपने पूर्वाग्रहों को दूर रखें और लिस्प को ईमानदार जाना दें

0
जोड़ा

मैं एक लिस्प विशेषज्ञ नहीं हूं, बिल्ली मैं एक लिस्प प्रोग्रामर भी नहीं हूं, लेकिन भाषा के साथ प्रयोग करने के बाद मैं इस निष्कर्ष पर आया कि कुछ समय बाद ब्रांडेसिस 'अदृश्य' बनना शुरू कर देता है और आप कोड को देखना शुरू कर देते हैं आप इसे होना चाहते हैं। आप एस-एक्सप्रस और मैक्रोज़ के माध्यम से बनाई गई सिंटैक्टिकल संरचनाओं पर अधिक ध्यान देना शुरू करते हैं, और सूचियों और ब्रांड्स के पाठ के शब्दावली रूप से कम होते हैं।

यह विशेष रूप से सच है यदि आप एक अच्छे संपादक का लाभ उठाते हैं जो इंडेंटेशन और सिंटैक्स रंग में मदद करता है (ब्रांड्स को पृष्ठभूमि के समान ही रंग में सेट करने का प्रयास करें)।

हो सकता है कि आप पूरी तरह से भाषा को प्रतिस्थापित न करें और 'रूबी' वाक्यविन्यास प्राप्त न करें, लेकिन आपको इसकी आवश्यकता नहीं है। भाषा लचीलापन के लिए धन्यवाद, यदि आप चाहें तो एक ऐसी बोलीभाषा समाप्त हो सकती है जो आपको लगता है कि 'प्रोग्रामिंग की रूबी शैली' का पालन कर रहे हैं, जो भी आपको चाहिए।

मुझे पता है कि यह सिर्फ एक अनुभवजन्य अवलोकन है, लेकिन मुझे लगता है कि मुझे उन लिस्प ज्ञान ज्ञानों में से एक था जब मुझे यह एहसास हुआ।

0
जोड़ा

हां, आप मूल रूप से वाक्यविन्यास बदल सकते हैं, और यहां तक ​​कि "कोष्ठक नरक" से बच सकते हैं। इसके लिए आपको एक नया पाठक वाक्यविन्यास परिभाषित करने की आवश्यकता होगी। पाठक मैक्रोज़ में देखो।

मुझे संदेह है कि इस तरह के मैक्रोज़ प्रोग्राम करने के लिए लिस्प विशेषज्ञता के स्तर तक पहुंचने के लिए आपको भाषा में इतनी हद तक विसर्जित करने की आवश्यकता होगी कि अब आप अभिभावक "नरक" पर विचार नहीं करेंगे। अर्थात। जब तक आप जानते हैं कि उनसे कैसे बचें, तो आप उन्हें एक अच्छी चीज़ के रूप में स्वीकार करने आएंगे।

0
जोड़ा

यह वास्तव में एक अच्छा सवाल है।

मुझे लगता है कि यह नीच है लेकिन निश्चित रूप से उत्तरदायी है:

मैक्रोज़ एस-एक्सप्रेशन में फंस नहीं गए हैं। कीवर्ड (प्रतीकों) का उपयोग करके लिखी गई एक बहुत ही जटिल भाषा के लिए लूप मैक्रो देखें। इसलिए, जब आप लूप को ब्रांड्स के साथ शुरू और समाप्त कर सकते हैं, इसके अंदर इसका अपना वाक्यविन्यास है।

उदाहरण:

(loop for x from 0 below 100
      when (even x)
      collect x)

ऐसा कहा जा रहा है कि, सबसे सरल मैक्रोज़ सिर्फ एस-एक्सप्रेशन का उपयोग करते हैं। और आप उनका उपयोग करके "अटक" होंगे।

लेकिन सर्जीओ ने एस-एक्सप्रेशन का जवाब दिया है, सही महसूस करना शुरू कर दिया है। वाक्यविन्यास रास्ते से बाहर हो जाता है और आप सिंटैक्स पेड़ में कोडिंग शुरू करते हैं।

पाठक मैक्रोज़ के लिए, हां, आप कल्पना कर सकते हैं कि इस तरह कुछ लिख सकते हैं:

#R{
      ruby.code.goes.here
  }

लेकिन आपको अपना खुद का रूबी सिंटैक्स पार्सर लिखना होगा।

आप मौजूदा रूस्प संरचनाओं को संकलित करने वाले मैक्रोज़ के साथ ब्लॉक की तरह कुछ रूबी संरचनाओं की नकल भी कर सकते हैं।

#B(some lisp (code goes here))

अनुवाद करेंगे

(lambda() (some lisp (code goes here)))

इसे कैसे करें इसके लिए यह पृष्ठ देखें।

0
जोड़ा
एक मैक्रो का आपका उदाहरण "एस-एक्सप्रेशन में फंस नहीं गया" मुझे एक एस-अभिव्यक्ति की तरह दिखता है।
जोड़ा लेखक Hugh Allen, स्रोत
लूप मैक्रो उदाहरण एक एस-एक्सप्रप्र है, लेकिन "सब-एक्सप्रेशन" नहीं हैं।
जोड़ा लेखक Eric Normand, स्रोत