基本的な構文
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には何でもマッチしちゃう感じです。