مقادیر منطقی در F# با نوع bool نمایش داده میشوند که مقادیر آن میتوانند true یا false باشند.
F# از سه عملگر منطقی پشتیبانی میکند: not (NOT)، && (AND) و || (OR).
در این تمرین، شما منطق مأموریت را برای یک بازی نقشآفرینی جدید که دوستتان در حال ساخت آن است، پیادهسازی میکنید. شخصیت اصلی بازی آنالین است، دختری شجاع که یک سگ خانگی سرسخت و وفادار دارد. متأسفانه اتفاق ناگواری میافتد؛ بهترین دوستش هنگام جستوجوی توت در جنگل دزدیده میشود. آنالین تلاش میکند بهترین دوستش را پیدا کند و آزادش کند و در این مأموریت بهصورت اختیاری سگش را همراه خود میبرد.
پس از مدتی که رد بهترین دوستش را دنبال میکند، اردوگاهی را پیدا میکند که بهترین دوستش در آن زندانی است. معلوم میشود دو آدمربا وجود دارند: یک شوالیهی قدرتمند و یک کماندار حیلهگر.
آنالین پس از پیدا کردن آدمرباها، به این فکر میکند که میتواند کدامیک از کارهای زیر را انجام دهد:
شما چهار کار دارید: پیادهسازی منطق تعیین اینکه آیا کارهای بالا بر اساس وضعیت سه شخصیتی که در جنگل پیدا شدند و اینکه سگ خانگی آنالین حضور دارد یا نه، در دسترس هستند.
تابع canFastAttack را پیادهسازی کنید که یک مقدار منطقی میگیرد و نشان میدهد آیا شوالیه بیدار است یا نه. این تابع اگر بر اساس وضعیت شوالیه بتوان حملهی سریعی انجام داد، true را برمیگرداند. در غیر این صورت، false را برمیگرداند:
let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false
تابع canSpy را پیادهسازی کنید که سه مقدار منطقی میگیرد و بهترتیب نشان میدهد آیا شوالیه، کماندار و زندانی بیدار هستند یا نه. تابع اگر بر اساس وضعیت سه شخصیت بتوان از گروه جاسوسی کرد، true را برمیگرداند. در غیر این صورت، false را برمیگرداند:
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true
تابع canSignalPrisoner را پیادهسازی کنید که دو مقدار منطقی میگیرد و بهترتیب نشان میدهد آیا کماندار و زندانی بیدار هستند یا نه. تابع اگر بر اساس وضعیت این دو شخصیت بتوان به زندانی علامت داد، true را برمیگرداند. در غیر این صورت، false را برمیگرداند:
let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true
تابع canFreePrisoner را پیادهسازی کنید که چهار مقدار منطقی میگیرد. سه پارامتر اول بهترتیب نشان میدهند آیا شوالیه، کماندار و زندانی بیدار هستند یا نه. پارامتر آخر نشان میدهد آیا سگ خانگی آنالین حاضر است یا نه. تابع اگر بر اساس وضعیت سه شخصیت و حضور سگ خانگی آنالین بتوان زندانی را آزاد کرد، true را برمیگرداند. در غیر این صورت، false را برمیگرداند:
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false