2011-11-03 7 views
7

रैकेट मैक्रो सिस्टम सीखने के लिए केवल सी मैक्रोज़ से परिचित अनुभवी अनिवार्य शैली प्रोग्रामर के लिए सबसे अच्छा मार्ग क्या है। न केवल इसके मैकेनिक्स (कैसे?) बल्कि यह कहां और क्यों उपयोग करें और उदाहरणों को इसका वर्णन क्यों करें।अनिवार्य शैली प्रोग्रामर के लिए रैकेट मैक्रो सिस्टम सीखने का सबसे अच्छा तरीका

क्या कोई योजना (या लिस्प) मैक्रोज़ पहले सीखना चाहिए? मैंने सुना है कि "ऑन लिस्प" पुस्तक में उनके उपयोग के उत्कृष्ट उदाहरणों के साथ लिस्प मैक्रोज़ का एक अच्छा स्पष्टीकरण है। क्या यह उपयोगी होगा या नहीं?

+0

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

+0

मैं यही सोच रहा था सैम :-) –

+0

हैरी, आपको इस प्रश्न को फिर से खोलने के लिए वोट देना चाहिए। –

उत्तर

6

Racket's documentation में excellent tutorial on using macros है।

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

उदाहरण (रैकेट के define-syntax-rule उपयोग करते हुए):

(define-syntax-rule (let ((var val) ...) 
         expr ...) 
    ((lambda (var ...) 
    expr ...) 
    val ...)) 

यह एक बहुत ही सरल मैक्रो कि एक इसी लैम्ब्डा बनाने, तो इसे लागू करने के मामले में let परिभाषित करता है। इसे पढ़ना आसान है, और इसके बारे में तर्क करना आसान है।

थोड़ा और अधिक जटिल मैक्रो:

(define-syntax let* 
    (syntax-rules() 
    ((let*() 
     expr ...) 
    (let() 
     expr ...)) 
    ((let* ((var val) next ...) 
     expr ...) 
    (let ((var val)) 
     (let* (next ...) 
     expr ...))))) 

यह नेस्ट let रों के मामले में let* परिभाषित करता है, ताकि बाइंडिंग क्रमिक रूप से किया जाता है। इसमें एक बेस केस (बिना बाइंडिंग के), साथ ही एक रिकर्सिव केस भी शामिल है।

+0

क्या आप इसके लिए किसी भी पुस्तक की सिफारिश कर सकते हैं। –

+1

पुस्तकों के बारे में नहीं जानते, लेकिन रैकेट के पास मैक्रोज़ के लिए एक उत्कृष्ट मार्गदर्शिका है: http://docs.racket-lang.org/guide/macros.html –

+0

आपको इस पॉइंटर के साथ उत्तर अपडेट करना चाहिए, क्योंकि यह एक और सीधा जवाब है मूल प्रश्न के लिए ... –

12

मेरा मानना ​​है कि मैक्रोज़ पर सबसे अच्छा ट्यूटोरियल अभी भी केंट डाइबविग का "Writing Hygenic macros in Scheme with syntax-case" है। यह विशेष रूप से रैकेट के बारे में नहीं है, लेकिन मूल रूप से सब कुछ खत्म हो जाएगा, और guide पढ़ रहा है कि ऊपर वर्णित क्रिस किसी भी शेष अंतर को कवर करेगा। नाम के बावजूद, इसमें "हाइजेनिक" और "अनजान" मैक्रोज़ दोनों शामिल हैं।

जुलाई संपादित करें 2014:

के बाद से मैंने लिखा ऊपर, ग्रेग Hendershott, रैकेट में मैक्रोज़ पर एक शानदार ट्यूटोरियल लिखा है Fear of Macros हकदार। यह रैकेट मैक्रोज़ के बारे में सीखना शुरू करने के लिए अब सबसे अच्छी जगह है।

+2

+1। मैंने वास्तव में इसे थोड़ी देर पहले पढ़ा है और इससे मुझे 'सिंटैक्स-केस' मैक्रोज़ को बहुत समझने में मदद मिली है, विशेष रूप से 'सिंटैक्स' जैसी चीजें कैसे काम करती हैं। –