تُمثَّل القيم المنطقية في 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
سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.