Gleam 用Bool型別來表示 true 和 false。這個型別只有兩個值:True和False。這些值可以綁定到變數上:
let true_variable = True
let false_variable = False
&&、||和!運算子可以用來操作布林值:
True && True // -> True
True && False // -> False
False || True // -> True
False || False // -> False
!False // -> True
!True // -> False
&&和||運算子採用短路求值,這代表運算子右側的運算式只會在需要時才求值。
每個運算子的優先順序都不同,其中!會比&&和||先求值。你也可以用大括號讓運算式的某一部分先求值,再處理其他部分:
!True && False // -> False
!{True && False} // -> True
在這道練習中,你需要把經典遊戲 Pac-Man 的幾條規則翻譯成 Gleam 函式。
你要翻譯四條規則,全都和遊戲狀態有關。
別擔心這些引數是怎麼來的,只要專注在把引數組合起來,回傳預期的結果就好。
定義 eat_ghost 函式,它接受兩個引數(Pac-Man 是否有能量球生效、以及 Pac-Man 是否碰到鬼),並回傳 Pac-Man 是否能吃掉鬼的布林值。只有當 Pac-Man 有能量球生效且碰到鬼時,這個函式才應該回傳True。
eat_ghost(False, True)
// -> False
定義 score 函式,它接受兩個引數(Pac-Man 是否碰到能量球、以及 Pac-Man 是否碰到豆子),並回傳 Pac-Man 是否得分的布林值。只要 Pac-Man 碰到能量球或豆子,這個函式就應該回傳True。
score(True, True)
// -> True
定義 lose 函式,它接受兩個引數(Pac-Man 是否有能量球生效、以及 Pac-Man 是否碰到鬼),並回傳 Pac-Man 是否輸掉的布林值。如果 Pac-Man 碰到鬼而且沒有能量球生效,這個函式就應該回傳True。
lose(False, True)
// -> True
定義 win 函式,它接受三個引數(Pac-Man 是否吃光了所有豆子、Pac-Man 是否有能量球生效、以及 Pac-Man 是否碰到鬼),並回傳 Pac-Man 是否獲勝的布林值。如果 Pac-Man 吃光了所有豆子,而且根據第 3 部分定義的引數判斷並沒有輸掉,這個函式就應該回傳True。
win(False, True, False)
// -> False