基本的な構文

7.3 if式


以前にも出てきた構文ですね。「式」なので、値を持つことに注意ですね。
なので、こんな書き方が出来ます。

Prelude> print $ if 4 == 4 then "True" else "False"
"True"


こういう風に書くよりもスマートですよね。

Prelude> if 4 == 4 then print "True" else print "False"
"True"

7.4 パターンマッチ

-Wオプションについて

便利なオプションですね。これからは必ず付けることにします。
試しに…

main = print $ hogehoge [2,3,4]

hogehoge :: [Int] -> Int
hogehoge [] = 5
hogehoge (x:[]) = x + 6


をビルドしてみると(ファイル名はexample.hs)

% ghc -W -o example example.hs 

example.hs:4:0:
    Warning: Pattern match(es) are non-exhaustive
             In the definition of `hogehoge': Patterns not matched: _ : (_ : _)


おぉ〜、パターンマッチが足りないことが示されています。
ちなみじ実行してみると

$ ./example
example: example.hs:(4,0)-(5,22): Non-exhaustive patterns in function hogehoge


なるほど、なるほど。

パターンマッチのパターン

この本の特徴として、必ずいくつかのパターンがあるものは最初にリストアップして、その後各項目の説明に入ります。
初心者的にはこれがとても分かりやすい!
始めて学ぶことでも、見通しが立って、不安にならないですね。このような書き方は見習わないといけないですね。
では一つ一つ丁寧に読み込んでいこう!

変数のパターン

どんな値にもマッチするパターンですね。たとえば、

add_one :: a -> a
add_one x  = x + 1


とてつもなく意味のない例ですけど、こんな感じ。xには何でもマッチしちゃう感じです。