不知道你是否完成了練習13.2中的函數?是否覺得函數的定義過於冗長了?的確,這種情況用if/then來定義不是很方便。case語句更適合這類情況。
用case語句重寫的13.2中的函數:
myCase x =
case x of
0 -> 1
1 -> 5
2 -> 2
_ -> -1
其中,_匹配所有情況。
case語句還有一種一段一段的寫法,比如,和上述函數等價的寫法:
myCase 0 = 1
myCase 1 = 5
myCase 2 = 2
myCase _ = -1
練習
14.1 如果將myCase改成以下定義,會出現什麽情況,為什麽?
myCase _ = -1
myCase 0 = 1
myCase 1 = 5
myCase 2 = 2
答案
13.1 輸入為5時,mySignum判斷5不小於0,故返回else if後面的語句,判斷5大於0, 故返回1。輸入為0時,mySignum判斷0不小於0,故返回else if後面的語句,判斷0不大於0, 故返回0。輸入為-1時,mySignum判斷-1小於0,故返回-1。
13.2
myCase x =
if x == 0
then 1
else if x == 1
then 5
else if x == 2
then 2
else -1