case 式
コード中のどこででもパターンマッチが使えるようになる。case は式である。
head' :: [a] -> a head' xs = case xs of [] -> error "error." (x:_) -> x
関数のパターンマッチは case のシンタックスシュガーとなっている。
head' :: [a] -> a head' [] = error "error." head' (x:_) = x
case は式のどこででも使える。
describeList :: [a] -> String describeList ls = "The list is " ++ case ls of [] -> "empty." [x] -> "a singleton list." xs -> "a longer list."
実行結果
*Main> describeList [] "The list is empty." *Main> describeList [1] "The list is a singleton list." *Main> describeList [1,2,3] "The list is a longer list."
case の書き換え
case 式 と 関数定義のパターンマッチは同じであることから、
describeList' :: [a] -> String describeList' ls = "The list is " ++ what ls where what [] = "empty." what [x] = "a singleton list." what xs = "a longer list."
実行
*Main> describeList' [] "The list is empty." *Main> describeList' [1] "The list is a singleton list." *Main> describeList' [1,2,3] "The list is a longer list."
所感
条件が複雑になってくるとどうなるのだろうか。個人的には where で書けるならそうしたほうが見やすいと感じた。
今日はここまで。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る