月 の 上

「コンピュータプログラミングの概念・技法・モデル」読んだ

コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)

コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)

やっと読み終わった。
図書館で借りて、9月中に読もうと思ってたけど、結局返却日前日に読み終わった。
メモりながら読んだ。練習問題は解いてない。

Mozart - CTM読書メモ (WIP) - Qiita

本のあらすじ

この本は、まず「核言語」っていう素朴なモデルを考える。
核言語は、Ozっていう実在する言語のサブセットになってるので、動かしながら学べる。
核言語をベースに、オブジェクト指向や関係プログラミングなどの機能を追加していき、紹介する。

長い

最初のほう、4章くらいまでが異常に辛いけど、それ以降は割りとスラスラ読めた。
いろんなモデルを紹介するにあたって、本書では2章で定義する「抽象マシン」とか「意味言明」とかいう概念を使って「意味」考えるんだけど、これがきつい。
もちろん「」で囲んだ単語は我々が普段使う言葉とは違う特殊な概念を表してる。
めっちゃ混乱するのでめっちゃメモ取りながら読んだけど、今考えると2章で飛ばして後で読んでも良かったと思う。

おもしろ概念

この本でおもしろかった概念いくつか。

データフロー変数

変数、束縛する前に使える。 変数の値を使うスレッドは束縛までブロックする。 これを利用して、ある程度の並列処理の制御とかできる

puts "Hello, #{w}!"  # "Hello, _!" が表示される
x = 10               # "Hello, world!" に表示更新される

差分リストを使ったキュー

差分リストは、2つのリストの差分で表現されるリスト。
例えば、 [1, 2] を表現する差分リストは[[1, 2, 3], [3]] [[1, 2, 3, 4], [3, 4]] [[1, 2], []]などがある。
何に使うの…って感じだけど、これを使って効率の良いキューを実装出来たりする。
(cf. http://www.kmonos.net/pub/Presen/PFDS.pdf)

無限ストリームとストリームオブジェクト

データフロー変数を使うと、無限リストが作れる

(defun gen (n) 
  (cons n (append (+ n 1))))
(setq stream (gen 1))

このとき、stream自然数のストリームになってる。 無限ループしてるけど、genが遅延評価で且つデータフロー変数使えると、(car stream) はいつでも使える。

ストリームと再帰を組み合わせると、ストリーム間でメッセージパッシングみたいなことができるようになるんじゃよ

資格

変数にアクセスする為のパスワード的なものを発行する
クラスとか無くてもプライベート変数作れる

どうでもいいけど

「名前」とか「意味」とか一般名詞に特殊な意味持たせるのやめてほしい、造語でもダジャレでもいいから名前つけてくれ