المسارات
/
Elixir
Elixir
/
التمارين
/
أعداد لوكاس
أعداد لوكاس

أعداد لوكاس

تمرين تعلّمي

مقدمة

التدفقات

جميع الدوال في وحدة Enum فورية. عند تنفيذ عمليات متعددة على الكائنات القابلة للتعداد باستخدام وحدة Enum، ستولّد كل عملية نتيجة وسيطة.

وتعدّ وحدة Stream بديلًا مؤجلًا لوحدة Enum الفورية. وتقدّم العديد من الدوال نفسها التي تقدّمها Enum، لكنها بدلًا من توليد نتائج وسيطة، تبني تسلسلًا من العمليات الحسابية لا تُنفَّذ إلا عندما يُمرَّر التدفق إلى دالة من وحدة Enum.

التدفقات تطبّق بروتوكول Enumerable وقابلة للتركيب، ويمكنك ربطها معًا لإنشاء وظائف أكثر تعقيدًا.

التعليمات

أنت من أشد المعجبين بقناة Numberphile على يوتيوب وقد شاهدت للتو فيديو رائعًا عن متتالية أعداد لوكاس. وتريد إنشاء هذه المتتالية باستخدام Elixir.

أثناء تصميم دالتك، تريد الاستفادة من التقييم الكسول، بحيث يمكنك توليد ما تريد من الأعداد، لكن فقط عند الحاجة إليها. لذلك تقرر استخدام تدفّق.

1. التقاط الوسائط غير الصالحة

أضف عبارة حماية لرفع خطأ إذا استُخدم عدد غير صحيح أو عدد صحيح أقل من 1 لإنشاء المتتالية. القيام بذلك كخطوة أولى سيمنع أخطاء 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. إنشاء الحالة المعمَّمة

لأي متتالية أطول من 2، تعلم أنك تحتاج إلى جمع العددين السابقين للحصول على العدد التالي، وهكذا. اكتب الحالة المعمَّمة.

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

LucasNumbers.generate(4)
# => [2, 1, 3, 4]
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء أعداد لوكاس؟

سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.