基本的な構文

7.5 case式


というくらいなので、値を持ちます。
関数の引数と全く同じように記述出来るとのこと。
いつものように他愛のない例ですが、こんな感じ。

main = do print $ myCase 0
          print $ myCase 101
          print $ myCase 99
          print $ myCase 33

myCase :: Int -> Int
myCase n = case n of
             0 -> (-1)
             n | n > 100   -> 100
               | n >  50   -> 50
               | otherwise -> 0


関数引数のパターンマッチとはちょっと違い、関数が評価される中で分岐が発生します。
関数引数のパターンマッチは関数が評価される前に分岐が発生していました。

7.6 関数定義

関数束縛について

いつも忘れてしまうので、書いておきます。
関数定義は、変数に関数を束縛することなんですね。
変数束縛と全然変わりません。
だからHaskellは関数を変数と同じように扱うことが出来るわけです。


…これまでの内容で関数定義(関数束縛)時にパターンマッチしてきましたけど、
変数束縛時にもパターンマッチ使えるのかな?
試してみました。

value1 =   3 :: Int
value2 = 400 :: Int
value3 = 171 :: Int

myValue1 = case value1 of
             0 -> (-1)
             n | n > 100   -> 100
               | n >  50   -> 50
               | otherwise -> 0

myValue2 = case value2 of
             0 -> (-1)
             n | n >  30   -> 100
               | n >   5   -> 50
               | otherwise -> 0

myValue3 = case value3 of
             0 -> (-1)
             n | n > 200   -> 100
               | n > 150   -> 50
               | otherwise -> 0

main = do print myValue1
          print myValue2
          print myValue3


なるほど、行けるんですね♪