मैं क्लोजर सीखने के लिए नया हूं। मैंने कुछ महीने पहले शुरू किया था। मै मैक्रोज़ सीखने की कोशिश कर रहा हूं।क्लोजर मैक्रोज़ सी मैक्रोज़ से अलग कैसे हैं?
मुझे प्रारंभ में क्लोजर में मैक्रोज़ और उच्च-आदेश कार्यों के बीच समझ में अंतर आया है क्योंकि उच्च आदेश फ़ंक्शन लैम्ब्डा ले सकता है और उनमें से किसी एक को निष्पादित कर सकता है कि वह किसी भी परिस्थिति और फ़िल्टर के आधार पर कितनी बार चाहता था।
इसलिए मैंने question को स्टैक ओवरव्लो पर इसके बारे में एक साधारण उदाहरण के साथ पोस्ट किया। मुझे अपने संदेह जवाब से मंजूरी मिली। विपरीत कार्यों शरीर का मूल्यांकन करने के
यह मैं क्या समझ में आ रहा है,
- मैक्रो सभी तर्कों का मूल्यांकन नहीं होंगे।
- मैक्रोज़ का मूल्यांकन करने के बारे में चुनिंदा हो सकता है और उद्धरण, अनकोट और स्प्लिसिंग सिंटैक्स का उपयोग करके कोड के एक टुकड़े को दूसरे में कैसे परिवर्तित किया जाए।
- मैक्रो से बाहर आने वाला अंतिम कोड तब मूल्यांकन किया जाता है।
तो मेरा सवाल यह है कि यह प्रीप्रोसेसर निर्देशों और सी में उपयोग किए गए मैक्रोज़ से अलग कैसे है? लिस्प/क्लोजर मैक्रोज़ उन डेवलपर्स को क्या शक्ति देता है जो सी मैक्रोज़ पूरी तरह से कमी करते हैं और अक्सर व्यापक रूप से उपयोग किए जाते हैं।
असल में, आप homoiconicity बिना एक पूर्ण मैक्रो प्रणाली हो सकता है। कोड का प्रतिनिधित्व करने के लिए उपयोग की जाने वाली डेटा संरचनाओं में लिस्प डेटा संरचनाओं की तुलना में अधिक जटिल आकार होता है। उदाहरण के लिए देखें [स्कैला मैक्रोज़] (http://docs.scala-lang.org/overviews/macros/overview.html)। –
एक और चीज जो आपके सूचीबद्ध गुणों का परिणाम है, लेकिन इसे एक अलग बिंदु के रूप में सूचीबद्ध किया जाना चाहिए, यह है कि क्लोजर मैक्रोज़ के साथ नए नियंत्रण संरचनाएं (सशर्त रूप, लूप, साथ-साथ फॉर्म आदि) बनाना आसान है। तब सामान्य क्लोजर सिंटैक्स का उपयोग करके उपयोग किया जा सकता है। –
@ जेरेमी डब्ल्यू। शेरमेन आप सी मैक्रोज़ ट्यूरिंग को पूरा कर सकते हैं, लेकिन उनके साथ मनमाने ढंग से परिवर्तन करना संभव नहीं है (भले ही आप जितना चाहें उतने पास करते हैं), जो मुझे लगता है कि यह अधिक महत्वपूर्ण बात है। उदाहरण के लिए आप एक मैक्रो 'एम' नहीं लिख सकते हैं, जैसे कि' एम (एफ (एक्स)) '' f (x, y) 'या' g (x) 'तक फैलता है। – sepp2k