趣味のことをやるページです。Lisp本、とりあえず片っ端から読んでいこうかと計画してる。Lispは、マクロに関する本だったが、これらはもっと色々な応用例を見せてくれる。Lispは狂った漫画が一番の特色だが(大好き。Lispに入門できる。みんなちゃんと遊べるから偉い。graphvisを出力にして、超簡易GUIを作るとか、面白いアイディアだと思う。clispの拡張機能を作るとはいえ、自分でwebサーバーを作っちゃうのも面白い。書いてあるコードだとchromeではエラーが出て、firefoxだと単なるテキストになってしまった。簡単なhttpのヘッダーを頭につけてやるとちゃんと動いだ。Lispと一緒で、最終目標はマクロでDSLを作ること。それこそがやはりLispの魂。この本ではSVGを生成するDSLを作って、それをwebブラウザで表示してゲームを作ってる。感動したのは、簡単なマクロを使って遅延評価を取り入れ、非常にエレガントにゲームのアルゴリズムを作ってること。ゲームの木を全て表現するデータ構造を使って、あとは遅延評価を取り入れれば、出来上がり。良いレスポンスを求めたければ木の無駄な枝を刈り取る必要がある。予想以上に伝統的なAIプログラミングだ。Lispには書いてないようなformatやloopの話が載ってるのも面白い。ポール・グレアムはloop嫌いだしね。loopとformatの黒魔術をガンガン使ったショートコードゲームはめまいがする。書いてないことも多い。CLOSについてはコミックに書いてあるだけ。packageには触れもしない。マクロについても最後に重要な役割を果たすけど、ちゃんと書いてあるとは言い難い。Lisp』も実践の名に恥じぬ本。バイナリを色々いじるのが面白かった。他のプログラミング言語の本でも滅多にバイナリを直接いじることはない。この本ではmp3ファイルのメタデータを取得して、SQLライクなデータベースを自作してる。あとWebプログラミングもできる。その際、htmlを吐き出すテンプレート言語を自作する。この本も目標はマクロを使って、バイナリデータを表現するクラス階層表現言語やデータベースへのクエリ言語やhtml生成言語などのDSLを作ること。ここにもLispの魂。この本もloopとformatについては詳しく書いてある。packageについてや、eval-whenなどの高度な機能についても説明してある。実際に製品を作ろうとすれば必要になる知識だろう(しかし、まだ外部のパッケージ管理等、現代的なエコシステムには必要なものが欠けているが、これはここ数年で進歩した部分なので、書いてないのは当たり前だ)。欠点としては、高度が全く関数型的ではないことだ。何でもかんでもとにかくloopで書こうとする。そもそも再帰に関する説明が全くない。グレアムオーム社2007-03-01面白かった。途中から「ポール・グレアム頭いいなあ!」と思うだけの本と化している気配はあるが、とにかく流れを追っていくと、ポール・グレアムが頭がいいことがわかる本だ。Lispのマクロをガンガン書いてくれる本というのがそもそも貴重である。prologによる簡易論理プログラミング、ATNによるパーサ、簡易オブジェクト指向、などを短いコードでどんどん実現していく。これはめくるめく体験と言って良い。これを読んでLispのマクロが書けるかと言われると微妙である。実際に書こうとするとまた苦労しなくてはいけないだろう。実際この本はマクロを教えてるというより、ポール・グレアムのマクロカタログ、と言った方がいい感じになっている。Lispを問題領域にぴったり寄り添った言語(DSL)に育てていく。そのためのLispの上にLispを置いて、抽象化の層をどんどん追加していく。いうLisp独特の考え方は学ぶことができる。何より一番はマクロの力を知ることができる。自分で素早くマクロを書くことはできなくても、この本を読んでおけば、「これってポール・グレアムが賢く解決してたタイプの問題だよなあ」と気づくことができる。するとマクロを試してみようとするし、そうすればマクロを書く苦労もできるし、マクロを書く能力も上がっていくという寸法だ。マクロの書き方を教える正しい方法って、もしかしたらまだ開発されてないんじゃないか、って気もする。ここから、Lisp本をとにかく読んでいって、どこかに書評をまとめよう。いつか自分でLispの本でも書こう。小説執筆の漢字変換にSKKを使い始めた。SKKを聞いたことがない人のために一応説明を書くと、SKKとは、普通の漢字変換ソフトと違って、変換の区切りを変換ソフトが一切判断せず、全て書き手が区切るソフトである。こちらの方が、手書きで文章を書く感じに似ていると考えたのだ。手書きで文章を書くときに、文単位で漢字を考えたりはしない。1つ1つの漢字を選んでいくはずだ。通常の漢字変換ソフトで書く漢字は、手書きではなく、口述筆記をしてもらう感じだ。通常の文書を書くときはそれでもいいのだが、小説を書くからには、1つ1つの漢字変換に対して書き手がもっと責任と支配力を持つべきだ、と考えて、SKKが正しい、と考えるに至った。これまで通常の漢字変換ソフトで書くと漢字が多すぎてしまう気がしていたが、これも是正されたし、私は書き損じや変換ミスが多いたちであったが、これも減った気がしている。タイピングが少し遅くなっているが、これも慣れであろう。これ以外にも、コンピュータ関連技術と小説執筆について、色々と考えていたことが溜まってきたので、どこかで書きたいものだ。小説を書いていて、文字コードなどを気にする人もあまりいないだろうが、現在の英数字のいわゆる「半角・全角」の使い分け方などを見ると、これでいいんだろうかと思わざるを得ない。小説を書く人間は「ワープロソフトで縦になるか横になるか」という理由で半角・全角英数字を使い分けているが、本来文字に半角・全角などがあるのは歴史的理由にすぎず、現在のフォント環境でこれらが半角・全角で表示されているわけでもなく、それどころか見分けられるフォントが用意されているとも限らない。これらは本来どちらも同じ文字を表している。文字コードの原則から行ったらそれらに別々の文字コードを与えるのは間違いである。Unicodeでこれらに別々の文字コードを与えられているのは、歴史的理由からの事前の解決にすぎない。ある以上、それらを使い分けることがそもそも問題の先送りに過ぎないはずだ。印刷したときに縦になるか横になるかは、フォントなどのレベルで解決すべき問題であろう。Uniodeにも問題がある。三点リーダのUnicode正規化における取り扱い方などを小説を書く人間が知れば驚くのではなかろうか。正規化とは、本来同じであるはずの文字に別々の文字コードを与えられてしまっている場合、それを1つの形に直すための処理だ。することによって、正規化を施す前と後では違う文字列になってしまう場合もある。それだけではない、その正規化が正しいという保証もない。三点リーダは、Unicode正規化の一種NFKDやNFKCでは、ピリオド3つに分解される。これは正しいのであろうか。日本語で小説を書く人間は絶対に正しくないと思うのではなかろうか。中黒3つでも正しくない気がする。パソコンは小説家にとって小説を書く道具である。パソコンに詳しくなくても、漢字変換や文字やフォント周りの知識くらいは持っていても損はないと思う。技術あなたの時間ニュートンはこの世界には「絶対時間」という唯一の時計があれば済むと考えていた。嗚呼、なんと牧歌的な時代であったことか。アインシュタインの相対性理論がそれを打ち砕いた。特殊相対性理論によれば異なる速度で等速直線運動している二つの物体の時間の流れは、どこかで時計を合わせたとしても、ずれ続ける。二つの座標系で時間の流れが違うからだ。同様に、何かが同時に起こるかどうかも、観測者がどのような運動をしているかで変わってしまう。ある者にとって同時に起きたものが、他の者には同時に起きない。一般相対性理論においては、物質の存在が時空を歪め、時間の流れも変える。この効果を計算に入れないと、人工衛星の時計を合わせることもできず、自分の位置を知ることも不可能である。同じ惑星にいても、少し離れれば、標高や地殻の成分によって時間の進む方は変わる。ディラックは特殊相対性理論と量子力学を結びつけるために、粒子一つ一つが固有の時間を持つ「多時間理論」を提唱した。朝永振一郎はそれをさらに発展させた空間のすべての点が固有の時間を持つ「超多時間理論」により、場の理論の特殊相対論化を成し遂げ、ノーベル賞を受賞した。量子力学によれば、空間のすべての点は対生成しては対消滅している粒子・反粒子によって沸き立っている。それらがすべて固有の時間を持っている。この世界は遍在する時計によって埋め尽くされているようなものだ。その後一般相対性理論の量子化と共に、問題はさらに複雑化し、混沌の態を成しはじめたことは言うまでもない。必然的な帰結として、我々も異なる時計に従って生きていくことしかない。一時的に時計を合わせることはできるから、生まれたばかりの赤子と母親、付き合い始めたばかりの恋人たち、共に難所を乗り越えようとするチームは積極的に時計を合わせはするものの、徐々にずれていってしまうのは如何ともしがたい。それはこの世の構造的に仕方のないことなのだ。我々が不変だと思っているものこそうつろいやすく、光速度など本当に不変である者は我々の実感からはあまりに遠く、仰ぎ見るほかない。