Arantium Maestum

プログラミング、囲碁、読書の話題

Thinking Functionally with Haskell勉強メモ: 序文

2月から少しずつRichard BirdのThinking Functionally with Haskellを読み進めている。

こちらも章ごとにメモを書いていきたい&章末の問題を解いていきたい。ちなみに章末の問題はすべて本にも模範解答が載っている。とりあえず今回は序文についてのメモ。

"for"でも"in"でもなく"with Haskell"なのが重要で、Haskellについての本ではなく「関数型言語的な考え方をHaskellを通じて学んでいく」のが主眼の本。SICPSchemeを急ぎで説明するが、LISPの本ではなく考え方が本題だったのと似ている。

関数型言語的な考え方」というのもまだ語弊があって、「Richard Bird流関数型言語の考え方」がより妥当だろうか。

"...writing down a simple, obvious, but inefficient way to solve a problem, applying some well-known equational laws, and coming up with another solution that is ten times faster"

というのがそれだ(序文からの引用)。

他の言語・パラダイムでも、まずは簡単で結果は正しいプログラムを書いてから効率化していくのは普通にアリな流れだと思うが、重要なのは"applying some well-known equational laws"で「『同値であることが保証される法則・定理』を使って非効率な記述を変換し続けて効率よくしていく」というのがポイント。5章でそれを使って数独ソルバーを作っていくのだが、初めて見た時はかなり衝撃的だった。

しかし、本当にこの手法である程度以上の規模のプログラムを開発することができるのだろうか?

とにかく「高等数学(特に圏論)を駆使してプログラミングする」という本ではなく、非常に単純な変換則で同値性を証明しながら書いていくスタイルなので、読み進めていく上で数学の知識を必要とはしないが数学的な記述に違和感を持たないことが重要そう。そういう意味でかなり人を選ぶ本かもしれない。