مسیرها
/
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 از فاصله‌ها و تورفتگی برای مشخص کردن مرزهای کد استفاده می‌کند.

کدی که بخشی از یک عبارت است باید با تورفتگی بیشتری نسبت به ابتدای آن عبارت نوشته شود.

  • ماژول، 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

ماژول

ماژول‌ها توابع را صادر می‌کنند. یعنی می‌توانید از توابعی استفاده کنید که ماژول در دستور 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

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

در این تمرین می‌خواهید کدی بنویسید که کمکتان کند یک لازانیای عالی را از کتاب آشپزی محبوبتان بپزید.

سه وظیفه دارید که همه به زمان صرف‌شده برای پختن لازانیا مربوط می‌شوند.

1. زمان مورد انتظار در فر را بر حسب دقیقه تعریف کنید

ثابت «expectedMinutesInOven» را تعریف کنید تا بررسی کنید لازانیا چند دقیقه باید در فر بماند. بر اساس کتاب آشپزی، زمان مورد انتظار در فر ۴۰ دقیقه است:

expectedMinutesInOven
    --> 40

2. زمان آماده‌سازی را بر حسب دقیقه محاسبه کنید

تابع «preparationTimeInMinutes» را تعریف کنید که تعداد لایه‌هایی را که به لازانیا اضافه کرده‌اید به عنوان پارامتر می‌گیرد و برمی‌گرداند که چند دقیقه صرف آماده کردن لازانیا کرده‌اید، با این فرض که آماده کردن هر لایه ۲ دقیقه طول می‌کشد.

preparationTimeInMinutes 3
    --> 6

3. زمان سپری‌شده را بر حسب دقیقه محاسبه کنید

تابع elapsedTimeInMinutes را تعریف کنید که دو پارامتر می‌گیرد: پارامتر اول تعداد لایه‌هایی است که به لازانیا اضافه کرده‌اید و پارامتر دوم تعداد دقیقه‌هایی است که لازانیا در فر بوده است. تابع باید بر گرداند که چند دقیقه روی پختن لازانیا کار کرده‌اید، یعنی مجموع زمان آماده‌سازی بر حسب دقیقه و زمانی که لازانیا تا این لحظه در فر گذرانده است.

elapsedTimeInMinutes 3 20
    --> 26
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Haskell Exercism

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

در Exercism ثبت‌نام کنید تا Haskell را همراه با 107 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.