2012-05-07 13 views
13

धाराओं (आलसी सूचियों) और monads के बीच कोई अंतर मौजूद है? वैचारिक और गणितीय दृष्टिकोण से, तकनीकी कार्यान्वयन से नहीं।धारा बनाम monads

अन्यथा, जीवित मौजूद है, एक-से-एक पत्राचार के बीच?

अधिक सटीक रूप से, धाराओं के रूप में इसका मतलब योजना भाषा के SRFI-41 से "स्ट्रीम भी करता है"।

क्या यह monads की तुलना में एक और श्रेणी है? यदि हां, तो यह कौन सी श्रेणी है?

मई "यहां तक ​​कि स्ट्रीम" मोनैड की तरह साइड इफेक्ट्स के नियंत्रण की गारंटी भी दे सकता है?

+0

जहां तक ​​मैं समझता हूं, योजना की धारा आलसी मूल्य हैं जबकि मोनाड्स कम्प्यूटेशंस की कस्टम श्रृंखला हैं। – Salil

+0

स्ट्रीम बिल्कुल आलसी सूचियां हैं। मोनैड के बिना "आलसी मूल्य" कैसे प्रस्तुत किए जा सकते हैं या फिर आलसी सूचियां या कुछ ऐसा? अपरिवर्तनीय कार्यात्मक चर के साथ "आलसी मूल्यों" को भ्रमित न करें। खैर, और "कम्प्यूटेशंस की कस्टम चेनिंग" में "स्ट्रीम" के साथ एक-से-एक पत्राचार होता है? – cofp

+0

ठीक है। "यहां तक ​​कि धाराओं" और monads दोनों की परिभाषाओं की तुलना करें। और उनके सिद्धांत भी। जैसा कि मुझे पता है, प्रत्येक धारा एक मोनड के माध्यम से व्यक्त की जा सकती है। क्या यह सच है कि प्रत्येक monadic "मूल्य" या "गणना" को "यहां तक ​​कि स्ट्रीम" के माध्यम से व्यक्त किया जा सकता है? क्या कोई सीमा है? – cofp

उत्तर

5

सलिल जैसा कि पहले ही कहा, दो अलग अलग अवधारणाओं हैं:

एक धारा केवल किसी तरह भंडारण, एक (संभावित अनंत) मानों की सूची है आम तौर पर, लेकिन जरूरी नहीं कि, आलसी फैशन में गणना की, यानी, अनुरोध किए जाने पर मूल्यों की गणना करना। वहाँ है कि चारों ओर उदाहरण के एक बहुत किसी भी तरह से monads शामिल नहीं है है:

(define integers (cons-stream 1 (stream-map (lambda (x) (+ x 1)) integers)) 

यह काफी भी परिमित, precomputed, नदियों के रूप में सूचियों पर विचार करने के लिए उपयोगी है जब से तुम उन्हें कहीं भी उपयोग कर सकते हैं एक (संभावित या जरूरी) परिमित आलसी धारा का इस्तेमाल किया जा सकता है।

तो, एक स्ट्रीम ऐसा कुछ है जिसमें अगले मूल्य और शेष स्ट्रीम प्राप्त करने के लिए next: streamType -> (valueType streamType) ऑपरेशन है।

 

monads, दूसरे हाथ पर, अलग-अलग आदेशों के संयोजन के द्वारा स्रोत कोड लिखने का एक तरीका एक डेटा संरचना के कम और अधिक कर रहे हैं।

शायद सबसे सरल उपयोगी उदाहरण है "शायद इकाई" - मुझे यकीन है कि क्या यह योजना में कैसा दिखेगा नहीं हूँ, खेद है, लेकिन विचार है: संगणना (f g h) की एक सूची और एक इनपुट x को देखते हुए, बाहर ले जाने के क्रम में गणना, लगभग (f (g (h x))) दिए जाने पर, लेकिन प्रत्येक फ़ंक्शन को गहराई से विफल होने दें: यदि gnil देता है, तो (f nil) पर न आएं, लेकिन इसके बजाय, nil तुरंत लौटाएं।

 

आप कर सकते हैं, ज़ाहिर है, विभिन्न उपयोगी तरीकों से दो गठबंधन और monads साथ अपनी स्ट्रीम मूल्यों की गणना या I/O धाराओं कि वास्तव में कार्यात्मक प्रोग्रामिंग की अपेक्षाओं का पालन नहीं कर रहे हैं की तरह स्ट्रीम में इस्तेमाल संपुटित एक मोनैड में (धारा के कुछ पिछली अवस्था के संदर्भ को संग्रहीत कोड से बचने के लिए), लेकिन वे पूरी तरह से अलग-अलग उद्देश्यों की सेवा करते हैं। अमूर्त परत के बारे में सोचें (कवर बंद करें, अंदरूनी न देखें): एक मोनैड, फ़ंक्शंस पर लागू होता है, आपको एक फ़ंक्शन देता है। दूसरी ओर, एक धारा कुछ उच्च कार्य नहीं है, लेकिन मूल्यों की एक सूची है।

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

+0

आपका उत्तर अधिक उपयोगी है। और पिछले जवाब पर आपत्तियां किसी भी अंतर के खिलाफ नहीं थीं। अंतर खोजने के लिए सवाल का मामला था। लेकिन पिछले जवाब पर आपत्तियां योजना के वादे के साथ "आलसी मूल्यों" के समीकरण के खिलाफ थीं। और कुछ और के खिलाफ, लेकिन किसी भी अंतर के खिलाफ नहीं। – cofp

+0

ठीक है, सिर्फ प्रश्न के पाठ में सुझाव था कि "कवर के नीचे" न दिखें। तो, "डेटा संरचना" और "कुछ करने का तरीका" ("लेखन कोड") के बीच अंतर क्या है? समय और राज्यों से अमूर्तता के दृष्टिकोण बिंदु से। कहने के लिए कि कुछ "डेटा संरचना" कम या कम है। और "आलसी सूचियां" संरचनाएं हैं या सिर्फ एक "रास्ता" हैं? चूंकि यह बयान "धाराएं बिल्कुल आलसी सूचियां हैं" केवल "आलसी मूल्यों" पर आपत्ति थी। इससे यह धारा का पालन नहीं करता है वास्तव में "डेटा संरचनाएं" हैं। – cofp

+0

"उच्च कार्य" के बारे में आपके तर्क अधिक मजबूत IMHO हैं। हालांकि इसे अभी भी एक सबूत की आवश्यकता है कि उच्च कार्यों के रूप में "यहां तक ​​कि धाराओं" का उपयोग करने का कोई तरीका नहीं है। तो यह साबित होगा कि धाराएं मॉडैड की तुलना में अधिक प्रतिबंधित हैं। लेकिन कहने के लिए कि वे * पूरी तरह से * अलग हैं, यह मत भूलना कि धाराओं को monads के माध्यम से व्यक्त किया जा सकता है। तो धाराएं सिर्फ monads की एक उपश्रेणी हैं। लेकिन क्या यह उपश्रेणी एक सख्त "उप" है? या यह केवल आंशिक चौराहे है? आईएमएचओ सवाल खुला है। – cofp

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