tl के माध्यम से पाठक में निर्मित तानाना है, डॉ *
मैक्रोज़ [सामान्य मैक्रोज़] मूल्यांकन (आरपीएल के ई) के दौरान विस्तारित होते हैं, प्रतीकों से बंधे होते हैं, लिस्प ऑब्जेक्ट्स पर काम करते हैं, और पहले में दिखाई देते हैं, या "फ़ंक्शन", एक रूप का हिस्सा होते हैं। क्लोजर, और सभी लिस्प्स, नए मैक्रोज़ को परिभाषित करने की अनुमति देते हैं।
रीडर मैक्रोज़ पढ़ने के दौरान, मूल्यांकन से पहले, एक वर्ण स्ट्रिंग पर काम करते हैं, पाठक से उत्सर्जित होने वाली सभी लिस्प ऑब्जेक्ट्स से पहले, और पहले में होने के लिए प्रतिबंधित नहीं होते हैं, या "फ़ंक्शन" , एक रूप का हिस्सा। क्लोजर, कुछ अन्य लिस्प्स के विपरीत, क्लोजर कंपाइलर को संपादित करने से कम, नए पाठक मैक्रोज़ को परिभाषित करने की अनुमति नहीं देता है।
अधिक शब्दों:
सामान्य गैर पाठक मैक्रो, या सिर्फ "मैक्रो", तुतलाना वस्तुओं पर कार्य करते हैं। पर विचार करें:
(and 1 b :x)
and
मैक्रो, दो मूल्यों के साथ बुलाया जाएगा एक मूल्य 1
है और अन्य प्रतीक b
(नहीं ख का मूल्य) और कीवर्ड :x
से मिलकर एक सूची है। and
मैक्रो सब कुछ पहले से ही एक लिस्प (क्लोजर) मान से निपट रहा है।
मैक्रो विस्तार केवल तब होता है जब मैक्रो सूची की शुरुआत में होता है। (and 1 2)
and
मैक्रो फैलाता है। (list and)
एक त्रुटि देता है, "मैक्रो का मूल्य नहीं ले सकता"
पाठक इन क्लोजर में एक वर्ण स्ट्रिंग को बदलने के लिए रीस्पॉन्सिबल है एक पाठक मैक्रो एक ऐसा वर्ण है जो पाठक को बदलने के लिए जिम्मेदार भाग को बदलता है लिस्प ऑब्जेक्ट्स में टेक्स्ट स्ट्रीम, संचालित करता है।क्लोजर के लिस्पी रीडर के लिए प्रेषण LispReader.java में है। जैसा कि अलेजैंड्रो सी द्वारा बताया गया है, क्लोजर रीडर मैक्रोज़ जोड़ने का समर्थन नहीं करता है।
रीडर मैक्रोज़ एक वर्ण हैं। (मुझे नहीं पता कि यह सभी लिस्प्स के लिए सच है, लेकिन क्लोजर का वर्तमान कार्यान्वयन केवल एकल वर्ण पाठक मैक्रोज़ का समर्थन करता है।)
रीडर मैक्रोज़ फॉर्म में किसी भी बिंदु पर मौजूद हो सकते हैं। (conj [] 'a)
पर विचार करें यदि '
मैक्रो सामान्य थे, तो टिक को एक लिस्प ऑब्जेक्ट बनने की आवश्यकता होगी ताकि कोड conj
, एक खाली वेक्टर, प्रतीक '
और आखिरकार a
प्रतीक की सूची हो। लेकिन अब विकास नियमों की आवश्यकता होगी कि '
का मूल्यांकन स्वयं ही किया जाए। इसके बजाय पाठक, '
को देखकर पूर्ण एस-एक्सप को quote
के साथ चलाता है ताकि मूल्यांकनकर्ता को लौटाया गया मूल्य conj
, एक खाली वेक्टर, और quote
की सूची a
की सूची हो। अब quote
एक सूची का प्रमुख है और यह उद्धरण के लिए मूल्यांकन नियम बदल सकता है।