Logoではワードを値として参照しているときは、頭に「:」を付ける。このlogoの「:」は、「thing "」の省略である。この手続き「thing」は文字列で示された名前の変数に与えられた値を返す手続きである。これをこの言語で実現するとすれば「の値」という述語になるだろう。
「:」でこの省略形を表現することで、logoではそのワードが手続きではなく、変数名として使われていることがはっきりと外見で分かるようにしてある。この用法はとても分かりやすいので、できれば倣ったほうがいいのだけど、日本語で書くときは見栄えがあまり良くない。できるだけ日本語らしく表記することを優先したいので、これを使わないことにする。述語「の値」の用意はするが。
そのため、ワードは次のように処理される。処理速度なんて最初から念頭に置いていない。これは動的な言語である。
■ワードの処理
1.述語として登録されているか調べ、候補を選ぶ。無ければ、3.へ
2.リストの並びを調べ、この候補が矛盾無く使えるか調べる。このとき、複数の述語が適合する場合は、「曖昧な表現です」という例外が発生し、解釈を中止する。一つならば、この述語の結果を持って、5.へ。
3.述語として登録されていないとき、もしくは述語が定義されていてもどれも矛盾してしまうときは、変数としてその名前が登録されているか調べ、登録されていればその値を結果とし、5.へ。
4.変数としても登録されていないときは、「このワードを知りません」という例外を発生させて、解釈を中止する。
5.結果をこのワードの値とする。
■文としてのリストの処理
リストの中のワードは、どのように解釈されるだろうか。答えは、リストはリストのままである。述語に処理されることによってはじめて要素は解釈の対象となる。つまり、制御文など、リストを文として解釈する述語が実行されるときになって、そのリストの内容が文として処理される。実際にはその時点でいわゆるeval関数が実行される。そのとき変数となるべきワードは変数として解釈される。これは手本にしているLogoをそのまま踏襲している。
とりあえずここまで考えておけば、後は作っていくうちになんとかなるだろう。Logo、特にUCBLogoの言語仕様を参考にして、それを日本語の文章を解釈できるようにかなり変形させている。実のところ、考え自体は数年前に漠然とできあがっていたのだけれど、日本語の解析ができずに困っていた。