सलिल जैसा कि पहले ही कहा, दो अलग अलग अवधारणाओं हैं:
एक धारा केवल किसी तरह भंडारण, एक (संभावित अनंत) मानों की सूची है आम तौर पर, लेकिन जरूरी नहीं कि, आलसी फैशन में गणना की, यानी, अनुरोध किए जाने पर मूल्यों की गणना करना। वहाँ है कि चारों ओर उदाहरण के एक बहुत किसी भी तरह से 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)))
दिए जाने पर, लेकिन प्रत्येक फ़ंक्शन को गहराई से विफल होने दें: यदि g
nil
देता है, तो (f nil)
पर न आएं, लेकिन इसके बजाय, nil
तुरंत लौटाएं।
आप कर सकते हैं, ज़ाहिर है, विभिन्न उपयोगी तरीकों से दो गठबंधन और monads साथ अपनी स्ट्रीम मूल्यों की गणना या I/O धाराओं कि वास्तव में कार्यात्मक प्रोग्रामिंग की अपेक्षाओं का पालन नहीं कर रहे हैं की तरह स्ट्रीम में इस्तेमाल संपुटित एक मोनैड में (धारा के कुछ पिछली अवस्था के संदर्भ को संग्रहीत कोड से बचने के लिए), लेकिन वे पूरी तरह से अलग-अलग उद्देश्यों की सेवा करते हैं। अमूर्त परत के बारे में सोचें (कवर बंद करें, अंदरूनी न देखें): एक मोनैड, फ़ंक्शंस पर लागू होता है, आपको एक फ़ंक्शन देता है। दूसरी ओर, एक धारा कुछ उच्च कार्य नहीं है, लेकिन मूल्यों की एक सूची है।
जाहिर है, मोनैड एक धारा के कार्यान्वयन के द्वारा (या आपके दृष्टिकोण के आधार पर लौटाया गया) द्वारा परिभाषित फ़ंक्शन, और साथ ही, स्ट्रीम से निकाले गए मान मोनैड हो सकते हैं। लेकिन जैसा कि आप ऊपर देख सकते हैं, मोनैड धाराओं से पूरी तरह से अलग चीजों को लागू कर रहे हैं। चाहे मोनैड्स के रूप में लागू न किए गए धाराएं हों, शायद इस बात पर निर्भर करती है कि आप वास्तव में किस शब्द का उपयोग करते हैं। मुझे कबूल करना होगा कि इस समय मैं निश्चित नहीं हूं कि अनंत धाराएं मोनाद के रूप में उचित रूप से अर्हता प्राप्त करती हैं; सीमित सूची स्पष्ट रूप से करते हैं।
जहां तक मैं समझता हूं, योजना की धारा आलसी मूल्य हैं जबकि मोनाड्स कम्प्यूटेशंस की कस्टम श्रृंखला हैं। – Salil
स्ट्रीम बिल्कुल आलसी सूचियां हैं। मोनैड के बिना "आलसी मूल्य" कैसे प्रस्तुत किए जा सकते हैं या फिर आलसी सूचियां या कुछ ऐसा? अपरिवर्तनीय कार्यात्मक चर के साथ "आलसी मूल्यों" को भ्रमित न करें। खैर, और "कम्प्यूटेशंस की कस्टम चेनिंग" में "स्ट्रीम" के साथ एक-से-एक पत्राचार होता है? – cofp
ठीक है। "यहां तक कि धाराओं" और monads दोनों की परिभाषाओं की तुलना करें। और उनके सिद्धांत भी। जैसा कि मुझे पता है, प्रत्येक धारा एक मोनड के माध्यम से व्यक्त की जा सकती है। क्या यह सच है कि प्रत्येक monadic "मूल्य" या "गणना" को "यहां तक कि स्ट्रीम" के माध्यम से व्यक्त किया जा सकता है? क्या कोई सीमा है? – cofp