ふつうのHaskellプログラミング 第1章 メモ
(節のふりかたは,本に準じてない)
Haskellは関数型言語
などがある.関数型言語は関数プログラミングをするもの.関数プログラミングは,関数を中心としてプログラムを組む.
うん,これは基本でしょう.というか,関数型言語という名前で想像がつく以上のことは何もいってないけど,とりあえず.
で,特徴的だと思うのが,関数は常に値を返すため,返り値がvoidである関数は存在しない.
プログラミング言語の種類としては,関数型のほかにも手続き型プログラミング(C言語など)や,オブジェクト指向プログラミング(Javaなど)などがある.
Haskellの利点
- 柔軟にプログラミングできる
- コンパイル時の型チェックが強力
- 読みやすい
- 遅延評価が基本
「柔軟にプログラミングができる」理由として,挙げられているのが高階関数.高階関数とは,関数を引数として受け取ったり,返したりする関数のこと.
これは確かに便利だけど,そこまで特徴的というわけではない気がする.別に他の言語だってできないことはない.
「コンパイル時の型チェックが強力」ってのは,Haskellをちょっと触っただけでも感じる.HaskellのスクリプトをWinHugsで読み込もうとしても,おかしな書き方してると,めっちゃはじかれるし,多相型とかいって,複数の型指定を一辺に行うことができる.
それと「読みやすい」ってのも感じる.たとえば,クイックソートのプログラム,
qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x]http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html
なんかを見ると,「おぉ,こいつはわかりやすいぜ」と思う.
ただ,本にかいてあるのは,「(再)代入がない」という理由.たしかに,変数の値がいったんきまったら二度と変更されないっていうのは,読みやすいかもしれないけど,そんなことしたら柔軟なプログラミングとは離れちゃうんじゃないかとも思う.組みにくそうだし.よくわからないけど.
最後に,「遅延評価が基本」だそうだけど,この機能の恩恵に与ってないので,正直まだよくわからない.
Javaでは,メソッドを呼ぶ前にその引数を評価するけど,Haskellでは,まず関数を評価して,それから実際に必要になった引数だけを評価する.この,必要な引数だけを評価するのが遅延評価らしいけど,じゃあ,どういう風に嬉しいのかっていうと,具体的にはよくわからない.
まぁでも,「ある意味,本書は遅延評価の嬉しさを書くためにあるといってもよいでしょう」と書いてあるので,おいおい理解していくことにする.
Haskell 7つの壁
- みんなHaskellは難しいって言ってる
- ドキュメントを読んだらいきなり参照透明性がどうとか……
- だって数学できないと使えないんでしょ?
- インストールで挫折した
- 型エラーが大量に出て恐い
- 型が難しい
- モナドがわからない
まぁ,けっこうどうでもいいことばっかり.
モナドが難しいというのはよく聞く.僕は,「難しいぞ」といわれると,「あぁ難しいんだ」と思い込んでしまって,なかなか理解できない癖があるから,あんまり気にしないことにしたい.高校一年のときの化学の授業で「molは難しいぞ」とさんざん言われ,考えるのを放棄した.それ以来,化学は避けて生きてるけど,たぶん冷静に考えれば難しくないんだろうと思う.てか,ただの単位っぽい.