技術のメモ箱

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を使うと関数内のみで使う変数や関数が定義できる。

pagetop