2013-10-13 15 views
5

क्या हैस्केल में शुद्ध कार्यों के लिए चर के स्थानीय प्रतियों को बदलना संभव है, जिस तरह से क्लोजर Functional Programming Is A Scam! by David Nolen में उल्लिखित किया जा सकता है? यदि नहीं, तो इसके कारण क्या हैं, और यदि ऐसा कोई उदाहरण है तो कोई मुझे बता सकता है?क्या हास्केल में चर के स्थानीय प्रतियों को बदलने के लिए शुद्ध कार्यों के लिए यह संभव है?

Functions that look pure to callers but internally use mutation में एक समान प्रश्न पूछा गया था और आम सहमति यह थी कि उत्परिवर्तन करने के लिए शुद्ध कार्यों के लिए यह ठीक था, जब तक उत्परिवर्तन चर की स्थानीय प्रतियों पर उत्परिवर्तन किया गया था (यानी उत्परिवर्तन का प्रभाव नहीं है समारोह से बचें और एक गैर-स्थानीय प्रभाव डालें)।

सवाल तब पैदा हुआ जब मैं शेन (Local mutation, global mutation, mutable datastructures, Bubblesort in Qi) है, जो Bubblesort in Common Lisp में नहीं करता सूची उत्परिवर्तित, आम तुतलाना के लिए और तुलना bubblesort है, जो सूची उत्परिवर्तित है में बुलबुला तरह अनुवाद। नतीजा यह था कि मैंने पाया कि (सामान्य लिस्प में) संस्करण जो सूची को उत्परिवर्तित करता है, उस सूची की तुलना में बहुत बड़ी सूचियों के लिए, सूची को उत्परिवर्तित नहीं करता था।

उत्तर

11

ST मोनैड शुद्ध कोड के भीतर परिवर्तनीय संचालन के सुरक्षित एम्बेडिंग के लिए बिल्कुल है। टाइप सिस्टम को यह सुनिश्चित करने के लिए लीवरेज किया जाता है कि कोई भी उत्परिवर्तित डेटा गुंजाइश से बच नहीं सकता है, इस प्रकार आप अपने पूरे कार्यक्रम को राज्य भरने के खतरे के बिना स्थानीय परिवर्तनीय स्थिति की शक्ति प्राप्त करते हैं (जो रेफरेंसियल पारदर्शिता को नष्ट कर सकता है या दौड़ की स्थिति पेश कर सकता है)।

अनुसूचित जनजाति इकाई पर कुछ प्रलेखन:

+0

धन्यवाद। "हास्केल विकी" में सबसे पुराना उदाहरण यह स्पष्ट करता है कि एक शुद्ध कार्य स्थानीय उत्परिवर्तनों को कैसे नियोजित कर सकता है। – artella

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

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