F# 中的布尔值由bool类型表示,它的值可以是true或false。
F# 支持三种布尔运算符:not(NOT)、&&(AND)和||(OR)。
在这个练习中,你要为一个新的角色扮演游戏实现任务逻辑,这个游戏是你朋友正在开发的。游戏的主角是 Annalyn,一个勇敢的女孩,有一只凶猛又忠诚的宠物狗。不幸的是,灾难降临了:她最好的朋友在森林里寻找浆果时被绑架了。Annalyn 会设法找到并救出她最好的朋友,在这次冒险中也可以选择带上自己的狗。
沿着最好朋友的踪迹追了一段时间后,她找到了关押她最好朋友的营地。原来绑架者有两个人:一位强大的骑士和一个狡猾的弓箭手。
找到绑架者后,Annalyn 开始考虑自己可以采取下面哪些行动:
你有四项任务:根据在森林里遇到的三个角色的状态,以及 Annalyn 的宠物狗是否在场,实现判断上述行动是否可行的逻辑。
实现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函数,它接受四个布尔值。前三个形参分别表示骑士、弓箭手和囚犯是否醒着。最后一个形参表示 Annalyn 的宠物狗是否在场。这个函数根据这三个角色的状态以及 Annalyn 的宠物狗是否在场,如果可以救出囚犯就返回true,否则返回false:
let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false