はじめに
この記事は、Haskell で条件分岐を元に作成しています。
簡潔でわかりやすいリンク元様に感謝しつつ、こちらでは、コピペしてそのまま確認できるものを用意してみました。
case
- 単純なcase文
foo n =
case n of
0 -> 0
1 -> 1
_ -> -1
- ガード条件付きcase文
foo n =
case n of
0 -> 0
1 -> 1
_ | n < 0 -> -1
| otherwise -> error "out of range!"
またパターンマッチでは、それぞれ以下のように書くこともできます。
foo 0 = 0
foo 1 = 1
foo n = -1
foo 0 = 0
foo 1 = 1
foo n
| n < 0 = -1
| otherwise = error "out of range!"
if
- 単純なif文
foo n =
if n >= 0
then "true"
else "false"
- else内でさらにif文分岐
foo n =
if n < 0
then "negative"
else if n > 0
then "positive"
else "zero"
ガード
foo n
| n < 0 = error "fibo out of range"
| n < 2 = 1
| otherwise = foo (n - 1) + foo (n - 2)
ちなみに上記はフィボナッチ数列です。1
ifをcaseに変換する
foo b =
case b of
True -> 1
False -> 0
ガードを case に変換する
foo n =
case n of
_ | n < 0 -> error "fibo out of range"
| n < 2 -> 1
| otherwise -> foo (n - 1) + foo (n - 2)