المسارات
/
Haskell
Haskell
/
التمارين
/
لازانيا لوسيان الشهيّة
لازانيا لوسيان الشهيّة

لازانيا لوسيان الشهيّة

تمرين تعلّمي

مقدمة

الثوابت والدوال

تتكوّن برامج Haskell من تعريفات وتعبيرات.

تُعرَّف قيمة الثابت بالصيغة name = expression.

five = 5

six = 3 + 3

تُعرَّف الدوال بالصيغة name parameters... = expression، وتُفصل المعاملات فيها بمسافة فقط.

add number1 number2 = number1 + number2

استدعاء دالة هو أيضًا تعبير، ويتم بتحديد اسم الدالة وتمرير وسائط لكل معامل من معاملاتها، مفصولة بمسافات، تمامًا كما في تعريفات الدوال.

five = add 2 3

يمكن استخدام الأقواس الهلالية لتحديد ترتيب تقييم التعبير.

six = add 2 (1 * 4)

twelve = add 2 1 * 4

الإزاحة / المسافات ذات الدلالة

يستخدم Haskell المسافات البيضاء والإزاحة لتحديد حدود الكود. يجب أن يكون الكود الذي هو جزء من تعبير ما مُزاحًا للداخل أكثر من بداية ذلك التعبير.

  • يجب أن تبدأ تعريفات module وimport والدوال على المستوى الأعلى من العمود الأول في أقصى اليسار.
  • إذا قُسِّم تعبير على عدة أسطر، وجب إزاحة الكود الذي هو جزء من ذلك التعبير تحت ذلك التعبير بمسافة واحدة على الأقل.
  • يجب إزاحة الأجزاء المجمّعة معًا من التعبير بعدد متساوٍ من المسافات.
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
    number1 + number2

https://en.wikibooks.org/wiki/Haskell/Indentation

الوحدات

تُصدِّر الوحدات الدوال. هذا يعني أنه يمكنك استخدام الدوال التي تُتيحها الوحدة في عبارة التصدير الخاصة بها. ويمكن للوحدة أيضًا أن تُعرّف دوالً للاستخدام الداخلي فقط. وبشكل افتراضي، لا يمكن استخدام الدوال التي لم تُصدَّر صراحةً من خارج الوحدة.

في بداية الوحدة، نحدّد اسم الوحدة. إذا كان لدينا ملف يُسمى Calculator.hs، فينبغي أن نسمّي وحدتنا Calculator. ثم نحدّد الدوال التي تُصدِّرها، وبعد ذلك نبدأ في كتابة الدوال. فلنبدأ بهذا.

module Calculator ( add ) where

https://learnyouahaskell.github.io/modules#making-our-own-modules

التعليقات

التعليق هو نص داخل ملف Haskell لا يُفسَّر ككود. وهو موجَّه أساسًا ليقرأه أنت ومبرمجون آخرون. توجد صيغة مبسّطة للتعليقات أحادية السطر، قائمة على الشرطتين المتصلتين. كما يمكن كتابة تعليقات متعددة الأسطر باستخدام الزوج {- و-} من الفواصل الافتتاحية والختامية.

-- a single line comment
-- another single line comment

{- a multiline comment
   spanning multiple lines
-}

شكر وتقدير

هذا التقديم للتمرين مستمدّ بكثافة من Learn You a Haskell for Great Good!، بموجب Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License

التعليمات

في هذا التمرين ستكتب بعض الكود لمساعدتك في طهي لازانيا رائعة من كتاب الطبخ المفضل لديك.

لديك ثلاث مهام، وكلها متعلقة بالوقت المستغرق في طهي اللازانيا.

1. عرّف زمن الفرن المتوقع بالدقائق

عرّف الثابت expectedMinutesInOven للتحقق من عدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. وفقًا لكتاب الطبخ، زمن الفرن المتوقع بالدقائق هو 40:

expectedMinutesInOven
    --> 40

2. احسب زمن التحضير بالدقائق

عرّف الدالة preparationTimeInMinutes التي تأخذ عدد الطبقات التي أضفتها إلى اللازانيا معاملًا، وتُرجع عدد الدقائق التي استغرقتها في تحضير اللازانيا، بافتراض أن تحضير كل طبقة يستغرق 2 دقيقة.

preparationTimeInMinutes 3
    --> 6

3. احسب الزمن المنقضي بالدقائق

عرّف الدالة elapsedTimeInMinutes التي تأخذ معاملين: المعامل الأول هو عدد الطبقات التي أضفتها إلى اللازانيا، والمعامل الثاني هو عدد الدقائق التي قضتها اللازانيا في الفرن. ينبغي أن تُرجع الدالة عدد الدقائق التي عملتها في طهي اللازانيا، وهو مجموع زمن التحضير بالدقائق والوقت بالدقائق الذي قضته اللازانيا في الفرن في تلك اللحظة.

elapsedTimeInMinutes 3 20
    --> 26
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Haskell Exercism

مستعد لبدء لازانيا لوسيان الشهيّة؟

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