زبان Gleam مقادیر «درست» و «غلط» را با نوع Bool نمایش میدهد. این نوع فقط دو مقدار دارد: True و False. میتوان این مقادیر را به یک متغیر نسبت داد:
let true_variable = True
let false_variable = False
میتوان از عملگرهای &&، || و ! برای کار با مقادیر منطقی استفاده کرد:
True && True // -> True
True && False // -> False
False || True // -> True
False || False // -> False
!False // -> True
!True // -> False
عملگرهای && و || از «ارزیابی اتصال کوتاه» استفاده میکنند؛ یعنی عبارت سمت راست عملگر فقط در صورت نیاز ارزیابی میشود.
هر یک از این عملگرها اولویت متفاوتی دارد؛ ! پیش از && و || ارزیابی میشود. از آکولادها میتوان استفاده کرد تا بخشی از عبارت پیش از بخشهای دیگر ارزیابی شود:
!True && False // -> False
!{True && False} // -> True
در این تمرین، باید چند قانون از بازی کلاسیک Pac-Man را به توابع Gleam ترجمه کنید.
چهار قانون برای ترجمه دارید که همه به حالتهای بازی مربوط میشوند.
نگران این نباشید که آرگومانها چگونه به دست میآیند؛ فقط روی ترکیب آرگومانها تمرکز کنید تا نتیجهی موردنظر را برگردانید.
تابع eat_ghost را تعریف کنید که دو آرگومان میگیرد (آیا Pac-Man قرص قدرت فعال دارد و آیا Pac-Man با یک روح در تماس است) و اگر Pac-Man بتواند آن روح را بخورد، یک مقدار منطقی برمیگرداند. تابع باید فقط در صورتی True را برگرداند که Pac-Man قرص قدرت فعال داشته باشد و با یک روح در تماس باشد.
eat_ghost(False, True)
// -> False
تابع score را تعریف کنید که دو آرگومان میگیرد (آیا Pac-Man با یک قرص قدرت در تماس است و آیا Pac-Man با یک نقطه در تماس است) و اگر Pac-Man امتیاز گرفته باشد، یک مقدار منطقی برمیگرداند. تابع باید اگر Pac-Man با یک قرص قدرت یا یک نقطه در تماس باشد، True را برگرداند.
score(True, True)
// -> True
تابع lose را تعریف کنید که دو آرگومان میگیرد (آیا Pac-Man قرص قدرت فعال دارد و آیا Pac-Man با یک روح در تماس است) و اگر Pac-Man ببازد، یک مقدار منطقی برمیگرداند. تابع باید اگر Pac-Man با یک روح در تماس باشد و قرص قدرت فعالی نداشته باشد، True را برگرداند.
lose(False, True)
// -> True
تابع win را تعریف کنید که سه آرگومان میگیرد (آیا Pac-Man همهی نقطهها را خورده است، آیا Pac-Man قرص قدرت فعال دارد و آیا Pac-Man با یک روح در تماس است) و اگر Pac-Man برنده شود، یک مقدار منطقی برمیگرداند. تابع باید اگر Pac-Man همهی نقطهها را خورده باشد و بر اساس آرگومانهای تعریفشده در بخش ۳ نباخته باشد، True را برگرداند.
win(False, True, False)
// -> False