fugafuga.write

日々のログ

すごいH本 part9

やっていきのこころ

パターンマッチ

  • パターンに従ってデータを分解するときに使う
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"

今日はここまで

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

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