تتكوّن برامج 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
في هذا التمرين ستكتب بعض الكود لمساعدتك في طهي لازانيا رائعة من كتاب الطبخ المفضل لديك.
لديك ثلاث مهام، وكلها متعلقة بالوقت المستغرق في طهي اللازانيا.
عرّف الثابت expectedMinutesInOven للتحقق من عدد الدقائق التي ينبغي أن تبقى فيها اللازانيا في الفرن. وفقًا لكتاب الطبخ، زمن الفرن المتوقع بالدقائق هو 40:
expectedMinutesInOven
--> 40
عرّف الدالة preparationTimeInMinutes التي تأخذ عدد الطبقات التي أضفتها إلى اللازانيا معاملًا، وتُرجع عدد الدقائق التي استغرقتها في تحضير اللازانيا، بافتراض أن تحضير كل طبقة يستغرق 2 دقيقة.
preparationTimeInMinutes 3
--> 6
عرّف الدالة elapsedTimeInMinutes التي تأخذ معاملين: المعامل الأول هو عدد الطبقات التي أضفتها إلى اللازانيا، والمعامل الثاني هو عدد الدقائق التي قضتها اللازانيا في الفرن. ينبغي أن تُرجع الدالة عدد الدقائق التي عملتها في طهي اللازانيا، وهو مجموع زمن التحضير بالدقائق والوقت بالدقائق الذي قضته اللازانيا في الفرن في تلك اللحظة.
elapsedTimeInMinutes 3 20
--> 26
سجّل في Exercism لتتعلّم وتتقن Haskell عبر 107 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.