Haskellの実装

Haskellは非正格純粋関数型言語の一であり,メインストリームの言語における常識からかけ離れたプログラムを書くことができる. id:nuc:20050627:p5 で「Hamming問題」を解くプログラムの非自明っぷりについて触れているが, lib/hugs/demos/ にはこの類のプログラムがいくつか収められている(Hamming問題はExample.hs).
でだ.「Haskellプログラムって直感的じゃなくてステキー」と「乗せられて」いるだけではしょうがないので, S. P. Jones and D. Lester, Implementing Functional Language: a Tutorial, Prentice Hall を一緒に読む人募集.PDFをプリントアウトしてもいい*1しCS図書館にある実物を借りてもいい.第2章までは春に読んだが,やはりG-machineまで行かなければしょうがないだろう.実際のソースコード(Goferだっけ,Mirandaだっけ?)が載っているし,構成がよい(細部は飛ばしても問題なく書かれている)本なのでその気になれば数日で通読できるはずだ(第4章のTIMはマイナーっぽいので要らないかも).
Neumann型コンピュータの実行プロセスを多少知っている者にとっては違和感の強い非正格純粋関数型言語であっても,決定的なアルゴリズムに基づいてNeumann型コンピュータ上で実行/解釈できる形に変換される.そこが一番素晴しいところだ,と私は思う.とりあえず,例やPreludeに出てくるような関数がG-machine上でどう実現されるのかが分かるようになれるとうれしい.
なおHugsソースアーカイヴの src/options.h の "Debugging options (intended for use by maintainers)" や "Experimental features" には "Define if debugging generated bytecodes or the bytecode interpreter" と付記された DEBUG_CODE を始めとして非常に食欲をそそるオプション(マクロ)が見つかる.詳細は opts.c の関連部分を眺めてからgrepしてほしい.有効にする方法は src/unix/configure --help すれば分かる(直接 options.h を書き換えてもいいんだろうけど).

*1:ページ数を少なくまとめるにはちょっとしたコツがいる.ECCSのAcrobatの「高度なツール」→「トリミング」で余白を削ってからその分拡大し,2ページを1枚にまとめて印刷するとよい.さらに両面印刷するかどうかはお好みに合わせて.

物理tips?

言い訳.
こう見えても毎日物理に没頭している.しかし計算機だと↑のような "tips" が色々書けえても,物理だとあまり書くことがないのが少し残念だ.
その分,俯瞰的な情報は貴重と思われるので(実際,あまり目にしない),むしろそっちに着目した情報発信を予定している... のだが,現状としては目の前の演習問題*1に追われているというのが情けない.
とりあえず輪講の要約を紙にまとめるところから... (私の担当は「例」という章だが,要約の練習にもなると思ったのでそうした) 理解することと表現することはまた別のことなので,それはそれでよい練習になる(はず).

*1:講義で出た課題という意味ではなくて,もっと一般の.教科書の例題とか個人的に持ってる演習書とか.