2013年7月2日火曜日

Haskellの学習~Real World Haskell 第2章~

こんにちは,今回は2章「型と関数」です.
この話はHaskellの基本なのでしっかり押さえておきたいです.

Haskellの型システム

Haskellの型のポイントは強い型・静的な型・自動的な型推論

強い型

Wikipediaによるとこのように書いてあります
強い型付けの定義の1つは、ある処理・演算が間違った型の引数をとることを禁止するというものである。例えばCでは不正なキャストができるが、これは強い型付けが存在しないことを示している。コンパイルが通ってしまうというだけでなく、実行時にも許されてしまうからである。これはコンパクトで高速なCのコードを可能にするが、デバッグをさらに困難なものにする。
...よくわからん
引数に整数をとるような関数に文字列を渡すとエラーになる.というものらしい.
また,暗黙的なキャストが行われないのも強い型の特徴でもある.
これにより,型の間違いによるエラーを実行前に発見できるが,その分別の型に変換するための余計なコードを書かなければいけないこともある .

静的型

プログラムを実行する前に変数や式がどのような型か決められていること.
これがあると実行する前に大体のエラーを検知できる!らしい...
自分は動的片付けのほうが慣れているので,これには少しなじめないかもなあ

自動的な型推論

特に型宣言しなくても型を推測してくれます.したら,明示的に型を付けることが可能です.
静的片付けだったらこれはいらないと思いますが...

2.6リストとタプル

リストもタプルも違いが今のところよくわからない.
ただし,タプルの要素が2,3を超えることはまれらしい.たぶんリストは結構あると思う.

練習問題



2.8関数の型と純粋性

Haskellの関数は純粋に入力値のみに依存する.これがHaskellの純粋性.
つまり,グローバルな変数や,その他の状況には依存しない.
テストをするときにはこれが非常に重要になる.どの環境でテストしても同じコードなら同じ結果になるから.
しかし,この純粋性はデフォルト値の話で,副作用があるものもある.そのような関数には頭にIOがついている.

2.10遅延評価

関数に渡す引数を渡す前に評価しないこと.


このようなコードがあった場合にisOdd(1 + 2) を使うとします.その場合に,引数に入れたとき(1 + 2)はまだ計算されておらず,3になっていないのです.そして関数内で実際に必要になった時に初めて(1 + 2)は評価され,3になります.
これを遅延評価と呼びます.

練習問題2.12


前回からだいぶ間が開いてしまいました.
次は「第3章 型を定義し,関数を単純化する」です