के बाद से कॉमन लिस्प के समारोह तर्क बाएँ-से-सही क्रम, क्यों एक साधारण समारोह का उपयोग नहीं होता में मूल्यांकन?आम लिस्प: क्यों प्रोन एक विशेष रूप है?</p> <pre><code>(defun progn2 (&rest body) (first (last body))) </code></pre> विशेष रूप के बजाय <p>:
उत्तर
वहाँ भी PROGN
का एक और विशेषता है जो आपको एक समारोह के साथ नहीं मिल सकता है:
कॉमन लिस्प कोड का एक फ़ाइल में इस कोड की कल्पना कीजिए:
(progn
(defmacro foo()))
बनाम
(my-progn
(defmacro foo()))
PROGN
का उपयोग करने के साथ संकलक DEFMACRO
फ़ॉर्म को शीर्ष-स्तरीय रूप के रूप में देखेगा। इसका मतलब है कि उदाहरण के लिए कि कंपाइलर नोट करता है कि एक मैक्रो परिभाषा है और इसे संकलन-समय पर्यावरण में उपलब्ध कराती है।
फ़ंक्शन MY-PROGN
का उपयोग करके, कंपाइलर DEFMACRO
फ़ॉर्म को पहचान नहीं पाएगा, क्योंकि यह शीर्ष-स्तर पर नहीं है।
क्या 'शीर्ष-स्तरीय-फॉर्म' का अर्थ है? – 1ambda
progn
रिटर्न पिछले प्रपत्र यह मूल्यांकन करता है के सभी मूल्यों, अपने कार्य सिर्फ पहले एक रिटर्न:
(progn (values 1 2 3))
=> 1, 2, 3
(progn2 (values 1 2 3))
=> 1
progn
(रेनर पहले से उल्लेख किया) का एक अन्य महत्वपूर्ण सुविधा है यह अपने सभी रूपों रहता top-level , जो मैक्रोज़ को एकाधिक रूपों में विस्तारित करना संभव बनाता है (उदाहरण के लिए, "“value returned is unused” warning when byte-compiling a macro" पर मेरा उत्तर)।
- 1. एकाधिक <html><body></html></body> उसी फ़ाइल में
- 2. जावास्क्रिप्ट, '<body>'
- 3. क्या <body> टैग
- 4. क्या <html> और <body>
- 5. <html> और/या <body>
- 6. <? के बजाय php <?
- 7. क्या HTML-ईमेल <html><body><head> से शुरू होना चाहिए ...?
- 8. पर jQuery ('टॉगल') संभव है?</p> <pre><code>$('body').on('toggle', '.element', function(){}); </code></pre> <p>:
- 9. <head> में एक स्क्रिप्ट कैसे प्राप्त करें <body>
- 10. <HTML> और <BODY>: कोई नई लाइन क्यों नहीं हैं?
- 11. <head> और <body> टैग <html> पर इंडेंटेशन के एक अलग स्तर पर होना चाहिए?
- 12. <Body> का मार्जिन और पैडिंग टैग
- 13. <<बजाय << स्ट्रीम आउटपुट में संकलन क्यों करता है?
- 14. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 15. रीडायरेक्टर "<<<"?
- 16. मैं टिनिमास को <! DOCTYPE html><html><head></head><body> जोड़ने से सब कुछ कैसे जोड़ सकता हूं?
- 17. एचटीएमएल <head> और <body> टैग के बीच क्या अंतर है?
- 18. अंतर << a_value
- 19. GIT भ्रष्ट फ़ाइलें (<<<<<<<< HEAD)
- 20. 'ऑपरेटर <<' के लिए 'std :: cout <<' में अस्पष्ट अधिभार <<
- 21. & &&, | के बीच अंतर क्या है और || आर में?</p> <pre><code>&, && |, || </code></pre> <p>उपयोग में अंतर क्या है:
- 22. शरीर के लिए ईवेंट हैंडलर जोड़ें। <body> भाग
- 23. पीएचपी: <<< ob_start बनाम
- 24. <head> में जावास्क्रिप्ट या</body> से पहले?
- 25. cout << "привет"; या wcout << एल "привет";
- 26. ओवरलोडिंग ऑपरेटर << - सी ++
- 27. पता की एक श्रृंखला दी गई स्मृति के आकार की गणना कैसे करें?</p> <pre><code> First @ Last @ </code></pre> <p>सीमा 1:
- 28. हास्केल/फ्रीज <= <और = << एसोसिएटिविटी
- 29. <script></script> या <script />?
- 30. सी ++ cout के लिए प्रारूप << स्वचालित रूप से
'defun' पहले से ही एक अंतर्निहित' progn' शामिल नहीं है? 'Defun' के मैक्रो विस्तार की जांच करें। – tuscland
दोनों @ एसडीएस और @ रेनर जोस्विग के उत्तरों महत्वपूर्ण अंक बनाते हैं। @ एसडीएस के उत्तर में 'मान' कुछ ऐसा है जो आप थोड़ी देर में पकड़ सकते हैं, और व्यवहार जो @RainerJoswig का वर्णन करता है वह बहुत महत्वपूर्ण है, खासकर जब आप अपने स्रोत में मैक्रो-आधारित शीर्ष-स्तरीय रूप डालने लगते हैं; यदि ये फॉर्म से अधिक उत्पादन करते हैं जिन्हें शीर्ष-स्तर के रूप में माना जाना चाहिए, तो आपको 'progn' की आवश्यकता है। –