برنامههای 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 از فاصلهها و تورفتگی برای مشخص کردن مرزهای کد استفاده میکند.
کدی که بخشی از یک عبارت است باید با تورفتگی بیشتری نسبت به ابتدای آن عبارت نوشته شود.
-- A function split over multiple lines, so subsequent lines must be indented
add number1 number2 =
number1 + number2
https://en.wikibooks.org/wiki/Haskell/Indentation
ماژولها توابع را صادر میکنند. یعنی میتوانید از توابعی استفاده کنید که ماژول در دستور export خود در دسترس قرار میدهد. یک ماژول میتواند توابعی را هم فقط برای استفادهی داخلی تعریف کند. بهطور پیشفرض، توابعی که صریحاً صادر نشدهاند نمیتوانند از بیرون ماژول استفاده شوند.
در ابتدای یک ماژول، اسم ماژول را مشخص میکنیم. اگر فایلی به اسم 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» را تعریف کنید تا بررسی کنید لازانیا چند دقیقه باید در فر بماند. بر اساس کتاب آشپزی، زمان مورد انتظار در فر ۴۰ دقیقه است:
expectedMinutesInOven
--> 40
تابع «preparationTimeInMinutes» را تعریف کنید که تعداد لایههایی را که به لازانیا اضافه کردهاید به عنوان پارامتر میگیرد و برمیگرداند که چند دقیقه صرف آماده کردن لازانیا کردهاید، با این فرض که آماده کردن هر لایه ۲ دقیقه طول میکشد.
preparationTimeInMinutes 3
--> 6
تابع elapsedTimeInMinutes را تعریف کنید که دو پارامتر میگیرد: پارامتر اول تعداد لایههایی است که به لازانیا اضافه کردهاید و پارامتر دوم تعداد دقیقههایی است که لازانیا در فر بوده است. تابع باید بر گرداند که چند دقیقه روی پختن لازانیا کار کردهاید، یعنی مجموع زمان آمادهسازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر گذرانده است.
elapsedTimeInMinutes 3 20
--> 26