2013-06-11 9 views
7

विनाशकारी और गैर-विनाशकारी LISP (या सामान्य रूप से) में संरचनाओं की सही परिभाषा क्या है। मैंने वास्तविक अर्थ की खोज करने की कोशिश की है, लेकिन मुझे वास्तव में इन शर्तों के बारे में बहुत कुछ उपयोग नहीं मिला है।LISP - विनाशकारी और विनाशकारी संरचना

यह मेरी समझ में आया कि विनाशकारी फ़ंक्शन का अर्थ एक फ़ंक्शन है, जो निर्माण (या परिवर्तनीय) के अर्थ को बदलता है - इसलिए जब मैं किसी फ़ंक्शन के पैरामीटर के रूप में एक सूची को पास करता हूं, जो इसे बदलता है, इसे विनाशकारी ऑपरेशन कहा जाता है, क्योंकि यह प्रारंभिक सूची बदलता है और एक नया ब्रांड लौटाता है। क्या यह सही है या क्या कुछ अपवाद हैं?

तो उदाहरण के लिए एक विनाशकारी कार्य सेट है (क्योंकि यह एक्स के मान को बदलता है)? मुझे नहीं लगता लेकिन मैं नहीं जानता, मैं इसे कैसे औचित्य दूंगा।

(set 'x 1) 

शायद एक बहुत ही बुनियादी सवाल के लिए खेद है .... किसी भी उत्तर के लिए धन्यवाद! के लिए-पक्ष प्रभाव संचालन और रीसाइक्लिंग संचालन:

+2

यह प्रश्न भी देखें: [पुशन्यू बिना स्थान समर्थन के। क्या इसे विनाशकारी मैक्रो माना जाता है?] (Http://stackoverflow.com/q/16789594/1281433)। कुछ जवाब वहां विनाशकारी और विनाशकारी संरचनाओं की अवधारणाओं पर चर्चा करते हैं। –

उत्तर

6

मैं 'विध्वंसक' शब्द में बहुत अधिक व्याख्या नहीं करता।

एक विनाशकारी ऑपरेशन प्रसंस्करण सूची में एक है जो संभावित रूप से एक या अधिक इनपुट सूचियों को एक दृश्य दुष्प्रभाव के रूप में बदलता है।

अब आप सरणी, संरचनाओं, सीएलओएस ऑब्जेक्ट्स आदि पर संचालन के अर्थ को विस्तृत कर सकते हैं। आप वैरिएबल असाइनमेंट 'विनाशकारी' और अन्य भी कॉल कर सकते हैं।

सामान्य लिस्प में अनुक्रमों (जो सूचियों, तारों और सामान्य रूप से वैक्टर हैं) और बहु-आयामी सरणी पर विनाशकारी संचालन के बारे में बात करना समझ में आता है।

5

Practical Common Lisp विनाशकारी आपरेशन के दो प्रकार के अलग करता है।

set विनाशकारी और दुष्प्रभाव है: यह हमेशा अपना पहला तर्क संशोधित करता है। सावधान रहें, कि यह प्रतीक के लिए बाध्यकारी को बदलता है, लेकिन वर्तमान में उस प्रतीक से जुड़ी चीज नहीं है। setf या तो बाइंडिंग या ऑब्जेक्ट्स को जगह में बदल सकता है।

इसके विपरीत, nreverse रीसाइक्लिंग है: यह अपने तर्क सूची संशोधित करने की अनुमति है, इसकी कोई गारंटी नहीं है कि यह होगा वहाँ हालांकि, तो यह सिर्फ reverse की तरह इस्तेमाल किया जाना चाहिए (वापसी मान लेने के लिए) है कि इनपुट तर्क को छोड़कर, "नष्ट" हो सकता है और अब इसका उपयोग नहीं किया जाना चाहिए। [स्कीम प्रोग्रामर इसे "रैखिक अपडेट" फ़ंक्शन कह सकते हैं।]

संबंधित मुद्दे