やっていきのこころ
パターンマッチ
- パターンに従ってデータを分解するときに使う
luckey :: Int -> String luckey 7 = "Luckey!!!" luckey x = "Unluckey!!!"
- パターンが上から下の順で評価される
- パターンが合致するとそのパターンの本体が実行される
*Main> luckey 7 "Luckey!!!" *Main> luckey 2 "Unluckey!!!"
階乗計算をパターンマッチで書く
factorial :: Int -> Int factorial 0 = 1 factorial n = n * factorial (n - 1)
実行結果
*Main> factorial 0 1 *Main> factorial 5 120
タプルのパターンマッチ
ベクトルの計算
addVectors :: (Double, Double) -> (Double, Double) -> (Double, Double) addVectors (x1, y1) (x2, y2) = (x1 + x2, y1 + y2)
実行結果
*Main> addVectors (1, 2) (3, 4) (4.0,6.0)
リストのパターンマッチとリストの内包表記
リスト内包表記内でパターンマッチが使える
-- タプルの2つめの要素が2のもののみ処理する *Main> [x * 2 | (x, 2) <- [(1,1), (1,2), (2,1), (2,2)]] [2,4]
head 関数を自分で実装する
*Main> head' [2,3,4,5] 2 *Main> head' [] *** Exception: error. CallStack (from HasCallStack): error, called at src/chapter3.hs:13:12 in main:Main
as パターン
値をパターンに分解しつつ、パターンマッチの対象になった値自体も参照したい場合に使う
firstLetter :: String -> String firstLetter "" = "Empty string, fooo!!!" firstLetter all@(x:xs) = "The first letter of " ++ all ++ " is " ++ [x]
実行結果
*Main> firstLetter "Richard Stallman" "The first letter of Richard Stallman is R"
今日はここまで

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