プログラミングHaskell第2章(はじめの一歩)まとめ
標準ライブラリ(Prelude)
- 二項演算
除算はdiv関数を使う。通常関数は、ポーランド記号(前置記法, prefix notation)で書くが、バッククオートを入れると中置記法(infix notation)で書くことができる。
演算子の優先順位や結合の仕方は数学の慣習と同じ(累乗演算子は右結合)。
Prelude> 2 + 3 5 Prelude> 2 - 3 -1 Prelude> 2 * 3 6 Prelude> 7 `div` 2 3 Prelude> 2 ^ 3 8 Prelude> 7 `div` 0 *** Exception: divide by zero
- リストの操作
takeやdropはリストの長さ以上の値nを指定してもエラーにはならないが、負の値を指定するとエラーになる。
!!で指定したインデックスの値を返すのか..
Prelude> let xs = [1,2,3,4,5] Prelude> head xs -- 空でないリストの先頭要素を返す 1 Prelude> init xs -- 空でないリストの末尾要素を返す [1,2,3,4] Prelude> tail xs -- 空でないリストから先頭の要素を取り除いたリストを返す [2,3,4,5] Prelude> xs !! 2 -- 空でないリストn番目の要素を返す 3 Prelude> take 3 xs -- リストの先頭からn個の要素からなるリストを返す [1,2,3] Prelude> drop 3 xs -- リストの先頭からn個の要素を取り除いたリストを返す [4,5] Prelude> length xs -- リストの長さを返す 5 Prelude> sum xs -- 数値のリストの要素の総和を求める 15 Prelude> product xs -- 数値のリストの要素の積を求める 120 Prelude> [1,2,3] ++ [4,5] -- 2つのリストを連結したリストを返す [1,2,3,4,5] Prelude> reverse xs -- 逆順のリストを返す [5,4,3,2,1]
関数適用
関数適用は他の全ての演算子より優先順位が高い。
数学 | Haskell |
f(x) | f x |
f(x,y) | f x y |
f(g(x)) | f (g x) |
f(x,g(y)) | f x (g y) |
f(x)g(y) | f x * g y |
命名規則
関数、引数の名前は、小文字で始まらなければならない。それ以降は、大文字、小文字、数値、_'が使える。
シングルクォートが使えるのか... 微分とか数学的な表記をしたい場合はいいのかな。
case, class, data, default, deriving, do else, if, import, in, infix, infixl infixr, instance, let, module, newtype, of, then, type, where
Haskellの慣習として、引数がリストである場合、名前の最後にsをつける
任意の値のリストならxs, 文字のリストのリストならcssといった感じ。
レイアウト規則
あるレベルの定義は、完全に同じ絡むから始まらなければならない。行頭揃えでグループ化する。
a = b + c where b = 1 c = 2 d = a *2
{}と;を使って、明示的にグループ化することも可能。
a = b + c where { b = 1; c = 2 } d = a * 2
コメント
-- コメント {- 複数行コメント コメント1 コメント2 -}