基本的な構文
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
なるほど、行けるんですね♪