今回は Guard という,条件分岐をサクッと書ける書き方について.
en.wikibooks の Haskell より. CC-BY-SA での配布です.
Guards
絶対値を吐く関数を書いてみましょう.Haskell にabs
関数があるので自分で書かなくてもいいんですが.書きたいのは,数式で書くと
|x| = x if x >= 0 -x if x < 0ってこと.
さて Haskell で書くでーーーー!
myabs x | x < 0 = 0 - x | otherwise = x大変読みやすくまとまっております.
- まず普通に書き始めて
=
書かずに改行,インデントを置いて(これは文法上必要)場合分けを書く.- 場合分けは
|
に続けて,Bool 値を返す expression,=
とその場合の右辺の順. - それぞれが guard と呼ばれるらしいぜ!
- otherwise は otherwise. 別になくても構わない.さっきので言えば
x<=0
で書いてもよかった.
けどどれも True にならなかったら runtime error になる(バグ取り大変)から使っといたほうがいい.
- 場合分けは
注意点.
-
otherwise
格好いいけど実はotherwise = True
って定義されてるだけらしい.賢いな.でもだから最後に置かなあかんよ. -
わざわざ
0 - x
って書いたけど,この場合は関数としてやなくてあくまで記法上の簡略化として-x
とだけ書いてもよかった.ただ3 - -5
みたいな書き方は括弧なしでは通らないので気をつけよう.
where
and Guards
where
と guard の組み合わせは使いやすい.二次方程式 ax^2 + bx + c = 0 の解の個数
numOfSolutions a b c | disc > 0 = 2 | disc == 0 = 1 | otherwise = 0 where disc = b^2 - 4*a*cここで
where
の scope は guard 全部の下に入ってるってことらしい.ということで今日はここまで.
No comments:
Post a Comment