意味論にそったインタプリタを作ることよわからない......そんな面倒なことをする意味があるのかわからない......本当にそれで理解できたのかは筆者もわからない......それじゃあ、簡単に説明をするからよく聞いてね。それでもR6RSを印刷したほうがいいわ。自分のものだと分かるように、ちゃんと名前を書かないとだめよ。「おなまえシール」を貼るというのも手ね。驚くほど大作になってたことに筆者はおったまげたそうよ。machine)の振る舞いを定めます。せいかくにより正確に言うと、プログラムの集合Pから表示可能な結果の集合Rのべき集合2Rへの関数Sを定義します(†1)。closure)ですが、そんな面倒な話はやめておきましょう。きほん抽象機械の振る舞いの定義の仕方を見てみましょう。抽象機械はてきとーに簡約できそうな場所を簡約するのよ。いい加減な性格なのね♪(簡約っていうのは単純な形にすることよ)かきかえ単一ステップ簡約の基本方針は「書き換えてよさそうな箇所(*1)があったら書き換える」というものです。(+)という部分式があり、これが書き換えていい箇所なら、これを0に書き換えます(*2)。この規則は次のように定められています。context)と呼ばれるものです。これではいまいち意味がわかりませんね。詳しい説明はあとでしましょう。書き換えてはいけない箇所です。むずかしいかきかえもう一つ、評価文脈の例を見てみましょう。これはR6RSに載っているものです。star)、つまり0回以上の繰り返しを表します。この場合は、xが0個以上並び、vも0個以上並ぶということを示しています。#x1はxの並ぶ個数、#v1はvの並ぶ個数です。カッコつきで右に書いてあるのは、この条件が満たされないとこの規則は使えないことを表しています。これはeに現れる1つ目のxを1つ目のvで、2つ目のxを2つ目のvで、といった風に置き換えたものを表します。ちなみにこの規則は関数呼び出し(β簡約)を表しています。実引数と仮引数の数が等しいときのみ使えます。本格的な内容になってくるわ。私が応援してるからね♪やくそくときほんまず、プログラムの文法を定めましょう。ここでは非終端記号(non-terminal)は通常のフォント、終端記号は太字で表すことにします。ように添え字を下に付けることがあります。すると、プログラムの状態は基本的に次の形式で表されます。es)sfはメモリの内容を示す非終端記号です。ようになるといった感じです。esはクォートを許す式を表す非終端記号です。任意の式と考えればいいです。ぷろぐらむのぶんぽうこれを念頭においてR6RSの完全な文法の定義を眺めてみましょう。Rは結果を表示可能な形式にしたものを表す非終端記号です。