Haskell入門 2.4 〜 3.2
- 作者: 本間雅洋,類地孝介,逢坂時響
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/27
- メディア: 大型本
- この商品を含むブログを見る
2.4 関数
関数呼び出しは
関数 引数
の形で呼んでいた。
関数定義は
関数 引数 = 式
の形で行う。
> incr n = n + 1 :: Int
ラムダ式を書く場合
> (¥n -> n + 1 :: Int)
カリー化
カリー化(currying)とは、多引数の関数を関数を返す関数として表現することです。
はい。
. による関数合成
f . g = ¥x -> f (g x)
ここで
f . g と合成すると、引数に対してまずgを適用して、次にその返り値にfを適用する関数になります
とあるけれど、関数適用って値を関数に適用するんじゃなかったっけ?(うろおぼえ)
遅延評価と非正格性
多くのプログラミング言語:関数を呼び出す前に引数の式を計算する=先行評価 Haskell:遅延評価
引数に⊥を渡したときに結果が⊥になるような関数を正格な関数(strict function)と言う。 ⊥を渡しても結果が⊥とはならない関数を非正格な関数(non-strict function)と言う。
書き方によって評価順序の制御をがんばることも可能。
main関数とdo式
はい。
・・・2章、読んでいるだけだとあまりスっと入ってこないので、一度飛ばして先に進んで、サンプルコードを読み書きしていて詰まったら戻ってくることにする。
3章へ進む。
3.2 型システム
式に型を割り当てて、正しく組み立てられているか確かめる仕組みのこと
型チェック
型付け規則に従っているかどうかをチェックする。このおかげで、静的型付き言語では炊かに起因する問題がおきない
多様性
任意の型の値に対して適用できる関数sample
*Main Lib> sample x = x *Main Lib> :t x x :: Num t => t *Main Lib> sample2Params f x = f x *Main Lib> :t sample2Params sample2Params :: (t1 -> t) -> t1 -> t
t
は汎用の型を表す型変数で、複数の具体的な型で利用できるようにした型システムはパラメータ多相(parametric polymorphism)を持つという。
アドホック多相
オブジェクト思考で言うオーバーロード。渡す値の型によって違う動きをする。
型推論(type inference)
処理系が自動で型を付けてくれる。
Haskellの型システムはHindley-Milnerの型システムを基にしている。
Hindley–Milner type system - Wikipedia
今回の勉強時間 1時間 累計勉強時間 20時間58分