2008年12月30日火曜日

【実践CL】4 シンタックスとセマンティックス


  • 4.1 何でこんなに括弧があるの?

    • M式の話。

  • 4.2 ブラックボックスをばらして中を見てみると

    • 「読取器は、どのようにして文字列がS式(s-expression)と呼ばれるLispのオブジェクトへと変換されるかを決める」これ、何か違和感があるな。まず、readerの重要要素はリーダーアルゴリズムとリードテーブルだろう。それらに従って文字列をLispオブジェクトに変換する。そうか、ここで言っているS式というのが何かというのがよくわからないのだ。そういえばS-expressionの正確な定義って何だ??
    • ちょっとしらべてみた。歴史的に言うと、マッカーシーがSymbolic expressionという用語を使っているようだ。ただし、ANSI CLにはS式という用語はないみたい。確かR5RSにもなかったはず。そして、S-expression自体は、Lispに閉じたものではなく汎用の表現形式として定義されているようだ。Rivest
    • なので、実践CLにおける、ここでのS式に対する言及は無視しておく。S式と言わずとも、Lispオブジェクト群という理解でいいのではないか。
    • readerが読む対象とする文字列は、リードテーブル次第で如何ようにもなりえる。なので、readerが読むものをS式ともいえない。また、CLのデフォルトであっても、例えば、'(a b)はS式ではないからそれをS式と呼ぶこともない。
    • ひとつ可能性があるのは、readerが読んだものをevalしないで印字形式に変換するとそれはS式なような気がする。すると、CLの実装として、readerがLispオブジェクトを生成するのではなく、その代わりにS式文字列を生成するようなものがあれば、そこではreaderがS式を生成すると言える。

  • 4.3 S式

    • 「数値は、そのまま数値だ」というのもわかりにくい。数値形式の文字列をreadすると、対応した数値のLispオブジェクトが生成される、ということだろう。

  • 4.4 LispフォームとしてのS式

    • ええっと、自己評価型オブジェクトの概念とR/W等価性とがごっちゃになっている。間違いなわけじゃないと思うが、今見返すと粗い説明だなぁ。

  • 4.5 関数呼び出し

    • 特になし。

  • 4.6 特殊オペレータ

    • quoteの説明のところもやはり不自然。「式を1つ取り、それをそのまま評価せずに返す」ではわかりにくいのでは? 「Lispオブジェクトを1つ取り、それをそのまま評価せずに返す」だろう。評価器への入力も出力もどちらも種別としてはLispオブジェクトのはずだ。そして、だからこそinとoutの間で「何もせずそのまま返す」ということが成り立つ。

  • 4.7 マクロ

    • (dolist (x foo) (print x))がマクロなのか関数なのかという不安について、xに着目せよ、と。callerがxを経由して値を与えるのではなく、xはこのフォームが指示する処理のなかで変数になっている、これは関数にはできなくて、マクロによってそういう処理に展開されるだろうという強い示唆だと。なるほど!

  • 4.8 真、偽、そして等しさ

    • 「いつでもEQLを使え」

  • 4.9 Lispコードの書式付け

    • C-cM-qがeliにはない。欲しいなぁ。


こつこつ。

0 件のコメント: