ট্র্যাক
/
Unison
Unison
/
অনুশীলনী
/
স্ট্রিম অপস
স্ট্রিম অপস

স্ট্রিম অপস

মধ্যম

নির্দেশনা

একটি স্ট্রিম অ্যাবিলিটির মৌলিক Stream অপারেশনগুলো ইমপ্লিমেন্ট করুন।

ফাংশনাল ভাষায় filter, map ও reduce-এর মতো ফাংশন খুবই কমন। বিদ্যমান ফাংশন ব্যবহার না করে একটি স্ট্রিম অ্যাবিলিটির জন্য ধারাবাহিক কিছু মৌলিক ফাংশনাল কম্বিনেটর ইমপ্লিমেন্ট করুন। এর জন্য আপনাকে নিজের অ্যাবিলিটি হ্যান্ডলার লিখতে হবে।

💡 স্ট্যান্ডার্ড লাইব্রেরিতে থাকা বিদ্যমান Stream অ্যাবিলিটির সাথে সংঘর্ষ এড়াতে আমরা এই অ্যাবিলিটির নাম দেব MyStream।

যে অপারেশনগুলো আপনাকে ইমপ্লিমেন্ট করতে হবে:

  • MyStream.fromList (এলিমেন্টের একটি লিস্ট পেলে সেটি থেকে এলিমেন্টের একটি স্ট্রিম তৈরি করে)
  • MyStream.toList (এলিমেন্টের একটি স্ট্রিম পেলে সেটিকে একটি লিস্টে রূপান্তর করে)
  • MyStream.toListWithResult (এলিমেন্টের একটি স্ট্রিম পেলে সেটিকে স্ট্রিম ফাংশনের ফলাফলের সাথে একটি লিস্টে রূপান্তর করে)
  • MyStream.ignore (এলিমেন্টের একটি স্ট্রিম পেলে নির্গত মানগুলো উপেক্ষা করে স্ট্রিম ফাংশনের ফলাফল রিটার্ন করে)
  • MyStream.filter (একটি প্রেডিকেট ও একটি MyStream পেলে, যেসব আইটেমের predicate(item) ট্রু, সেগুলো নিয়ে গঠিত MyStream রিটার্ন করে);
  • MyStream.map (একটি ফাংশন ও একটি MyStream পেলে, সব আইটেমে function(item) প্রয়োগের ফলাফল নিয়ে গঠিত MyStream রিটার্ন করে);
  • MyStream.flatMap (একটি ফাংশন, যা একটি MyStream উৎপন্ন করে, ও একটি MyStream পেলে, সব আইটেমে function(item) প্রয়োগের ফলাফল নিয়ে গঠিত MyStream রিটার্ন করে)

Stream অ্যাবিলিটি সম্পর্কে

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]

অ্যাবিলিটি হ্যান্ডলারের সাহায্যে যে ফাংশনটি স্ট্রিম তৈরি করে, তার রিটার্ন ভ্যালুর পাশাপাশি আমরা স্ট্রিমটিকে একটি List হিসেবে ম্যাটেরিয়ালাইজ করতে পারি:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Unison Exercism

স্ট্রিম অপস শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Unison ট্র্যাকের 53টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।