مسیرها
/
Elixir
Elixir
/
تمرین‌ها
/
اعداد لوکاس
اعداد لوکاس

اعداد لوکاس

تمرین یادگیری

مقدمه

جریان

همه‌ی توابع موجود در ماژول Enum حریصانه هستند. وقتی چندین عملیات را با ماژول Enum روی داده‌های قابل شمارش انجام می‌دهید، هر عملیات یک نتیجه‌ی میانی تولید می‌کند.

ماژول Stream جایگزینی تنبل برای ماژول Enum است که حریصانه عمل می‌کند. این ماژول بسیاری از همان توابع Enum را ارائه می‌دهد، اما به‌جای تولید نتایج میانی، مجموعه‌ای از محاسبات را می‌سازد که تنها زمانی اجرا می‌شوند که جریان به یکی از توابع ماژول Enum سپرده شود.

جریان‌ها پروتکل Enumerable را پیاده‌سازی می‌کنند و قابلیت ترکیب دارند. می‌توانید آن‌ها را به هم زنجیر کنید تا کارکردی پیچیده‌تر بسازید.

دستورالعمل‌ها

شما طرفدار پروپاقرص کانال یوتیوب Numberphile هستید و تازه ویدیوی جالبی درباره‌ی دنباله‌ی اعداد لوکاس دیده‌اید. می‌خواهید این دنباله را با Elixir بسازید.

هنگام طراحی تابع خود، می‌خواهید از ارزیابی تنبل استفاده کنید تا بتوانید هر تعداد عدد که می‌خواهید تولید کنید، اما فقط اگر به آن‌ها نیاز داشته باشید. پس تصمیم می‌گیرید از یک استریم استفاده کنید.

1. گرفتن آرگومان‌های نامعتبر

یک guard clause اضافه کنید تا اگر برای تولید دنباله مقداری به کار رود که عدد صحیح نباشد یا عدد صحیحی کوچک‌تر از ۱ باشد، خطا ایجاد شود. انجام این کار در گام اول، از بروز bugهای بازگشت بی‌نهایت در گام‌های بعدی جلوگیری می‌کند.

LucasNumbers.generate("Hello World")
# => ** (ArgumentError) count must be specified as an integer >= 1

2. تولید حالت‌های پایه

می‌دانید که این دنباله دو عدد آغازین دارد که از قاعده‌ی یکسانی پیروی نمی‌کنند. دو بند حالت پایه بنویسید تا این اعداد را برگردانند:

LucasNumbers.generate(1)
# => [2]

LucasNumbers.generate(2)
# => [2, 1]

3. ساخت حالت تعمیم‌یافته

برای هر دنباله‌ای بلندتر از ۲، می‌دانید که باید دو عدد قبلی را جمع کنید تا عدد بعدی به دست بیاید و به همین ترتیب ادامه دهید. حالت تعمیم‌یافته را بنویسید.

LucasNumbers.generate(3)
# => [2, 1, 3]

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elixir Exercism

آماده‌اید اعداد لوکاس را شروع کنید؟

در Exercism ثبت‌نام کنید تا Elixir را همراه با 58 مفهوم168 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.