読者です 読者をやめる 読者になる 読者になる

kanetaiの二次記憶装置

プログラミングに関するやってみた、調べた系のものをQitaに移して、それ以外をはてブでやる運用にしようと思います。http://qiita.com/kanetai

プログラミング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 -}