Haskell/ガード
関数を定義する際に、引数の値が満たす性質によって別々に定義できる。
ガードを書くには、パイプ文字と真理値式、式がTrueの時に実行される関数の本体を書く。
上から順に評価される。otherwiseはすべてをキャッチする。
func :: Int -> String
func x
| x < 10 = "small"
| otherwise = "big"
階乗のサンプル
factorial :: Integer -> Integer
factorial n
| n < 0 = 0
| n == 0 = 1
| otherwise = n * factorial (n - 1)
フィボナッチ数列のサンプル
fibonacci :: Integer -> Integer
fibonacci n
| n < 0 = 0
| n < 2 = n
| otherwise = fibonacci (n - 1) + fibonacci (n - 2)
whereやletを使うと関数内のみで使う変数や関数が定義できる。