Bool类型是这门编程语言的基本组成部分之一。它用来描述某个东西是真的还是假的,对应的值分别是True和False。
布尔值可以用&&(“AND”)和||(“OR”)运算符组合,也可以用not函数取反。
布尔值还非常适合用来在代码中创建分支:只有当满足特定条件时,这些分支才会执行。在 Elm 中,这通过if-then-else表达式实现,用法如下。
if someCondition || (someOtherCondition && anotherCondition) then
doSomething
else
doSomethingElse
在这个练习中,你要为一个朋友正在开发的新角色扮演游戏(RPG)实现冒险任务的逻辑。游戏的主角叫 Annalyn,是个勇敢的女孩,身边有一只凶猛又忠诚的宠物狗。不幸的是,灾难降临了:她最好的朋友在森林里采浆果时被绑架了。Annalyn 会设法找到并解救她最好的朋友,在这次冒险中她可以选择带上自己的狗。
沿着最好朋友的踪迹追踪了一段时间后,她找到了关押着她最好朋友的营地。原来有两个绑匪:一个强大的骑士和一个狡猾的弓箭手。
找到绑匪之后,Annalyn 思考自己可以采取以下哪些行动:
你有五项任务:根据森林里这三个角色的状态,以及 Annalyn 的宠物狗是否在场,实现判断上述行动是否可行的逻辑。
实现 canFastAttack 函数,它接受一个布尔值,表示骑士是否醒着。如果根据骑士的状态可以发动快速攻击,这个函数返回 True。否则,返回 False:
knightIsAwake = True
canFastAttack knightIsAwake
--> False
实现 canSpy 函数,它接受三个布尔值,分别表示骑士、弓箭手和囚犯是否醒着。如果根据这三个角色的状态可以侦查这群人,这个函数返回 True。否则,返回 False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
canSpy knightIsAwake archerIsAwake prisonerIsAwake
--> True
实现 canSignalPrisoner 函数,它接受两个布尔值,分别表示弓箭手和囚犯是否醒着。如果根据这两个角色的状态可以给囚犯发信号,这个函数返回 True。否则,返回 False:
archerIsAwake = False
prisonerIsAwake = True
canSignalPrisoner archerIsAwake prisonerIsAwake
--> True
实现 canFreePrisoner 函数,它接受四个布尔值。前三个形参分别表示骑士、弓箭手和囚犯是否醒着,最后一个形参表示 Annalyn 的宠物狗是否在场。如果根据这三个角色的状态以及 Annalyn 的宠物狗是否在场可以解救囚犯,这个函数返回 True。否则,它返回 False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False
canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
--> False
实现 stealthAttackDamage 函数,它接受一个布尔值,表示 Annalyn 是否被发现。如果她被发现,这个函数返回 7,否则返回 12。
annalynIsDetected = True
stealthAttackDamage annalynIsDetected
--> 7