読者です 読者をやめる 読者になる 読者になる

気がついたらScheme(Lisp)をやっていた

Scalaを勉強してたと思ったらSchemeを勉強していました……。以下覚書。

 

最初にScalaを勉強しようとして「Scalaプログラミング入門」を読みきったのだけど、どうも関数型言語がわかった気にならない。というか、Scalaはやっぱり記述が冗長な気がするし、「Scalaプログラミング入門」の後半で出てきたサンプルコードがスマートで無いように感じた。……感じたっつっても「理解せずに投げ出した」というのが正しいわけですが……。

んで、次どうしようかなぁ、と思ってたら、twitterSICPという本があることを知りました。

計算機プログラムの構造と解釈

計算機プログラムの構造と解釈

MITの講義を書籍にしたものらしい。ちなみに原書ならWEBで読める。んでこれを図書館で借りてきて読み始めたのですが……面白い! 恥ずかしいことに今までLispは食わず嫌いで全く手を出していなかったのですが、とても後悔しました。大学で情報科学を勉強してる学生なんかは必読ですね。個人的にはK&Rを読むよりSICPだと思います。

しかし、いかんせんこの本は難しい。それにもっと包括的な知識がほしい……! というわけで本を漁り始めました。

まずはHaskellでひっかかっていたモナドが、圏論という集合論の理論から来ている、ということで集合論を勉強しなおそう、と思い「集合とはなにか」を読みました。

新装版 集合とはなにか―はじめて学ぶ人のために (ブルーバックス)

新装版 集合とはなにか―はじめて学ぶ人のために (ブルーバックス)

とりあえず通読して、大体の感じがつかめたので次はこれを読もうと思ったところで、「モナドよりまずλ計算じゃね?」と気がついてしまったので、まだ手を出していませんがいずれ買うつもり。

圏論による論理学―高階論理とトポス

圏論による論理学―高階論理とトポス

さてλ計算を勉強しようと思って本を探し始めたのですが何を読んでいいのか分からず……となったところできしださんの記事を見つけたので参考に。

http://d.hatena.ne.jp/nowokay/20110926

ここでも上がっていた「論理と計算のしくみ」は図書館で読んでみたところ面白そうだったのでまずこれを読むことにしました。手元に置いておきたかったので注文中。

論理と計算のしくみ

論理と計算のしくみ

図書館でパラ見した感想としては、野矢茂樹「論理学」の次に「論理と計算のしくみ」、さらにその次に「プログラム意味論」と読み進めるとイイ感じだと思う。「論理と計算のしくみ」で詰まったら「論理学」を読んでリベンジするつもり。

論理学

論理学

プログラム意味論 (情報数学講座)

プログラム意味論 (情報数学講座)

さて、λ計算というかLispの処理系を入れないとプログラミングできないわけですが、探していたらGaucheという処理系を見つけました。日本人ハッカー川合史郎さんのプロジェクトだそうで、「ハッカーと画家」の翻訳もされている方でした。気に入ったのでGaucheを使うことに。んでご本人も執筆されているオライリー本を購入。

プログラミングGauche

プログラミングGauche

Gaucheで楽しくプログラミングするぞー!

……と、宣言しておけばあとあとひっこみつかなくなって勉強進むかな……と。

※追記
ちなみに、プログラミングGaucheサポートページが充実していて、正誤表がしっかり作られてます。なので、できれば最新の版、刷を買うのが良いかと……。初版1刷を買ったために大量の誤記を訂正することになったので……。この辺、WEBのいいところでもあるんだけど。

あと個人で正誤表を公開している方もいるので、合わせてチェックすると良い(というか、した)。http://d.hatena.ne.jp/blechmusik2/20110301/1298915034