プログラミングHaskell | |
Graham 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]
第5章 リスト内包表記
リスト内包表記と呼ぶと怖そうなのでミニSQLと呼ぼう
http://d.hatena.ne.jp/sonota88/20120918/1347989850
第8章 関数型パーサー
今ここ。パーサーもある程度は知ってるので徒手空拳というほどではないけどよく分かってない……書いて動かすのが良さそう。
7章まででつまづくのはカリー化と関数合成で、どっちも普段使っていないのと記法に慣れていないのとで出てきてもぱっと把握できない。
foldr :: (a → b → b) → b → [a] → b
みたいなやつとか。。
リストの処理で cons や car/cdr な話が出てくるけどちょびっと Lisp 触ってたのでこれは怖くない。たとえば「今までずっと Java だけやってました。他の言語は知りません」みたいな人がいきなり読んだらどうなるんだろう……。
慣れ大事。