F#の真偽値はbool型で表され、その値はtrueかfalseのどちらかです。
F#では、not(NOT)、&&(AND)、||(OR)という3つの真偽値演算子を使えます。
この演習では、友人が開発している新しいRPGゲームのクエストロジックを実装します。ゲームの主人公はAnnalynで、勇敢な少女であり、獰猛で忠実な飼い犬を連れています。残念ながら、親友が森でベリーを探しているときに誘拐されてしまい、災難が降りかかります。Annalynは親友を見つけて解放しようとし、このクエストに犬を連れて行くこともあります。
親友の足跡をしばらく追ったあと、Annalynは親友が囚われている野営地を見つけます。そこには2人の誘拐犯がいました。強大な騎士と、ずる賢い弓使いです。
誘拐犯を見つけたAnnalynは、次の行動のうちどれを実行できるかを考えます。
4つのタスクがあります。森で見つけた3人のキャラクターの状態と、Annalynの飼い犬がいるかどうかに基づいて、上記の行動が可能かどうかを判断するロジックを実装します。
canFastAttack関数を実装します。この関数は、騎士が起きているかどうかを示す真偽値を受け取ります。この関数は、騎士の状態に基づいて速攻できる場合にtrueを返します。そうでなければfalseを返します。
let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false
canSpy関数を実装します。この関数は3つの真偽値を受け取ります。それぞれ、騎士、弓使い、囚人が起きているかどうかを示します。この関数は、3人の状態に基づいて集団を偵察できる場合にtrueを返します。そうでなければfalseを返します。
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true
canSignalPrisoner関数を実装します。この関数は2つの真偽値を受け取ります。それぞれ、弓使いと囚人が起きているかどうかを示します。この関数は、2人の状態に基づいて囚人に合図を送れる場合にtrueを返します。そうでなければfalseを返します。
let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true
canFreePrisoner関数を実装します。この関数は4つの真偽値を受け取ります。最初の3つの入力は、それぞれ騎士、弓使い、囚人が起きているかどうかを示します。最後の入力は、Annalynの飼い犬がいるかどうかを示します。この関数は、3人の状態とAnnalynの飼い犬の有無に基づいて囚人を解放できる場合にtrueを返します。そうでなければfalseを返します。
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false