Enum মডিউল-এর সব ফাংশনই ইগার। Enum মডিউল দিয়ে এনুমারেবলগুলোর উপর একাধিক অপারেশন করলে প্রতিটি অপারেশন একটি মধ্যবর্তী ফলাফল তৈরি করবে।
Stream মডিউল হলো ইগার Enum মডিউলের একটি লেজি বিকল্প। এটি Enum-এর মতোই অনেক ফাংশন দেয়, তবে মধ্যবর্তী ফলাফল তৈরি না করে এটি গণনার একটি ধারা তৈরি করে, যা কেবল তখনই চালানো হয় যখন স্ট্রিমটিকে Enum মডিউলের কোনো ফাংশনে পাঠানো হয়।
স্ট্রিমগুলো Enumerable প্রোটোকল ইমপ্লিমেন্ট করে এবং এগুলো কম্পোজেবল। আপনি এগুলো একসাথে চেইন করে আরও জটিল কার্যকারিতা তৈরি করতে পারেন।
আপনি Numberphile Youtube চ্যানেল-এর একজন বড় ভক্ত এবং আপনি এইমাত্র লুকাস সংখ্যা অনুক্রম সম্পর্কে একটি দুর্দান্ত ভিডিও দেখেছেন। আপনি Elixir ব্যবহার করে এই অনুক্রমটি তৈরি করতে চান।
আপনার ফাংশন ডিজাইন করার সময়, আপনি লেজি ইভালুয়েশন ব্যবহার করতে চান, যাতে আপনি যত সংখ্যা চান জেনারেট করতে পারেন, কিন্তু কেবল তখনই যখন আপনার প্রয়োজন হয়। তাই আপনি একটি স্ট্রিম ব্যবহার করার সিদ্ধান্ত নেন।
সিকোয়েন্সটি জেনারেট করতে যদি কোনও নন-ইন্টিজার বা ১-এর কম ইন্টিজার ব্যবহার করা হয়, তাহলে একটি এরর রেইজ করার জন্য একটি গার্ড ক্লজ যোগ করুন। প্রথম ধাপ হিসেবেই এটি করলে পরবর্তী ধাপগুলোতে অসীম রিকার্সন বাগ প্রতিরোধ করা যাবে।
LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1
আপনি জানেন যে এই অনুক্রমের দুটি প্রারম্ভিক সংখ্যা আছে যেগুলো একই নিয়ম অনুসরণ করে না। এই সংখ্যাগুলো রিটার্ন করার জন্য দুটি বেস কেস ক্লজ লিখুন:
LucasNumbers.generate(1)
# => [2]
LucasNumbers.generate(2)
# => [2, 1]
২-এর চেয়ে বড় যেকোনো অনুক্রমের জন্য, আপনি জানেন যে পরবর্তী সংখ্যা পেতে আপনাকে আগের দুটি সংখ্যা যোগ করতে হবে এবং এভাবে চলতে থাকবে। জেনারালাইজড কেসটি লিখুন।
LucasNumbers.generate(3)
# => [2, 1, 3]
LucasNumbers.generate(4)
# => [2, 1, 3, 4]
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।