Stream एबिलिटी के बुनियादी ऑपरेशन लागू कीजिए।
फंक्शनल भाषाओं में filter, map और reduce जैसे फंक्शन बहुत आम होते हैं। किसी स्ट्रीम एबिलिटी के लिए बुनियादी फंक्शनल कॉम्बिनेटरों की एक श्रृंखला लागू कीजिए। ऐसा करते समय पहले से मौजूद फंक्शनों का इस्तेमाल न कीजिए। इसके लिए आपको अपने खुद के एबिलिटी हैंडलर लिखने होंगे।
💡 स्टैंडर्ड लाइब्रेरी में पहले से मौजूद Stream एबिलिटी से टकराव से बचने के लिए हम इस एबिलिटी को MyStream कहेंगे।
जिन ऑपरेशनों को आपको लागू करना होगा, वे ये हैं:
MyStream.fromList (एलिमेंट की एक ऐरे दिया जाए, तो एलिमेंट की एक स्ट्रीम बनाइए )MyStream.toList (एलिमेंट की एक स्ट्रीम दी जाए, तो उसे एक ऐरे में बदल दीजिए)MyStream.toListWithResult (एलिमेंट की एक स्ट्रीम दी जाए, तो उसे स्ट्रीम फंक्शन के परिणाम के साथ-साथ एक ऐरे में बदल दीजिए)MyStream.ignore (एलिमेंट की एक स्ट्रीम दी जाए, तो उससे निकलने वाली वैल्यू नज़रअंदाज़ करते हुए स्ट्रीम फंक्शन के परिणाम लौटाइए)MyStream.filter (एक प्रेडिकेट और एक MyStream दिया जाए, तो उन सभी आइटम का MyStream लौटाइए जिनके लिए predicate(item) सही है);MyStream.map (एक फंक्शन और एक MyStream दिया जाए, तो सभी आइटम पर function(item) लागू करने के परिणामों का MyStream लौटाइए);MyStream.flatMap (एक ऐसा फंक्शन जो MyStream बनाता है और एक MyStream दिया जाए, तो सभी आइटम पर function(item) लागू करने के परिणामों का MyStream लौटाइए)Stream Unison की एक एबिलिटी है जिसका उपयोग वैल्यू निकालने के लिए किया जाता है।
आप Stream एबिलिटी का उपयोग तब कर सकते हैं जब आपके पास ऐसा फंक्शन हो जो कॉल किए जाने के दौरान अतिरिक्त प्रभाव के रूप में वैल्यू पैदा करता हो। उदाहरण के लिए, यह फंक्शन ऐरे की अंतिम वैल्यू लौटाता है, लेकिन जैसे-जैसे हर एलिमेंट देखा जाता है, एक रनिंग टोटल भी निकालता है:
emitRunningTotal : '{Stream Nat} Nat
emitRunningTotal = 'let
use Nat +
List.foldLeft (
acc a -> let
runningTotal = acc + a
Stream.emit runningTotal
a
) 0 [1,2,3,4,5]
एबिलिटी हैंडलर की मदद से हम Stream को List में बदलकर उस फंक्शन की रिटर्न वैल्यू के साथ पा सकते हैं जो उस Stream को बनाता है:
> Stream.toListWithResult! emitRunningTotal
⧩
([1, 3, 5, 7, 9], 5)