読んでる: プログラミングHaskell

プログラミングHaskell
プログラミングHaskellGraham Hutton 山本 和彦

オーム社 2009-11-11
売り上げランキング : 136902


Amazonで詳しく見る
by G-Tools

読んでます。

not じゃなくて ¬、&& じゃなくて ∧ などが使われてたりして数学の教科書っぽい。

第1章 導入

大丈夫

第2章 はじめの一歩

大丈夫

第3章 型とクラス

整数とか文字列とかのデータの型じゃなくて、入力の型と出力の型のマッピングのことも単に「型」と書いてあってちょっと混乱した。

例(p19):

また、 Bool → Bool という型は、否定演算子 ¬ のように、Bool型を Bool型へ変換するすべての関数を含む。

「〜という型は(略)関数を含む」うーむ……ということは関数は型に含まれるものなの……?

p25 の
「型 Int → Int の関数」

「この「add' 1」は、「引数を一つ取って 1 を加えた値を返す関数」で、型は「Int → Int」である。」
といった表現から推察して、まあそういうものなのかなと。

でもまぎらわしく感じるので何か別の語を(読みながら脳内で)当てたい……「関数型」? 「メタ型」?

カリー化は知ってるけど普段使っていないのでなかなかすっと入ってこなくて、ちょっと立ち止まらないといけない。記法への慣れもあると思う。

第4章 関数定義

p42 最初の n 個の奇数を返す関数 odds

odds n = map (λx → x*2+1) [0..n-1]

このくらいなら説明読まなくても分かる。RubyLispScheme) のおかげ。

第5章 リスト内包表記

リスト内包表記と呼ぶと怖そうなのでミニSQLと呼ぼう
http://d.hatena.ne.jp/sonota88/20120918/1347989850

第6章 再帰関数

再帰は基本的なとこは知ってるので割とさらっと流せる。

第7章 高階関数

高階関数も知ってるので割とさらっと流せる。

第8章 関数型パーサー

今ここ。パーサーもある程度は知ってるので徒手空拳というほどではないけどよく分かってない……書いて動かすのが良さそう。


7章まででつまづくのはカリー化と関数合成で、どっちも普段使っていないのと記法に慣れていないのとで出てきてもぱっと把握できない。

foldr :: (a → b → b) → b → [a] → b

みたいなやつとか。。

リストの処理で cons や car/cdr な話が出てくるけどちょびっと Lisp 触ってたのでこれは怖くない。たとえば「今までずっと Java だけやってました。他の言語は知りません」みたいな人がいきなり読んだらどうなるんだろう……。

慣れ大事。