Programmer's Note

コード読み書きの備忘録。

Haskellの勉強をはじめる

今年に入ってからHaskellを勉強し始めた。これが結構楽しい。教科書は「Programming in Haskell」。(この本は名著だ)

読み進めてコードを書いてみるにつれ、最初の想像と違って、かなりLISPに近い印象を受ける。ラムダ計算がベースなので、そっくりなのは当たり前かもしれない。

この言語の文法は可能な限り簡略化されてて、関数の定義にdefもカッコも必要なく、引数を与えるのにカンマもいらない。

手書きでアルゴリズム考えるのにLISPより使いやすい。カッコ不要で中置記法、条件文も明瞭で無駄がなく、コードが読みやすい。教育用としてとても使いやすい言語だと思う。(そのために設計されたのかもしれないが)

LISPのS式とは違った美しさがある。

かなり好きになりそう。

この先、興味があるのは、型がプログラミング上どれくらい本質的な重要性を持つかというところ。そもそもHaskellを勉強してみたくなったのは、Rich Hickeyが静的型とパターンマッチングをdisってたのが気になったからだしな。

最近はClojureでHacker Rankの問題を解いてて、すっかり考え方(解き方)がマンネリ化してきていると感じている。再帰は手軽な(loop...)ばかり使ってしまう。まあ得意技を持つのは悪いことではないが、引き出しの数が増えない。

Haskellの勉強はかなり良い意味で視点の転換、拡張をさせてくれている。

例えばリスト内包表記はClojureの(for...)と実質同等なのだが、処理対象をデータグループとして捉えるか、forループの結果として捉えるかで、問題の解き方が大きく違ってくるんだなと気付かされた。(本の中でこの違いを言及している訳じゃなくて、自分が後者の視点ばかり持っていたから、前者の視点での解法にinsightを与えられた)

文法の違いが実は思考の展開の違いを生んでいる。

 

「達人プログラマ」がいう年に一個新しい言語を学べというのは、侮れないアドバイスなり。と。