[Haskell筆記]case語句

不知道你是否完成了練習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

Leave a Reply