2007年12月23日

変数の扱いについて

日本語プログラミング言語を妄想する続き。プログラミング言語Logoを日本語化しようという目論みから始まったことだけど、今の仕様ではLogoでの変数の扱いを踏襲していない。できるだけ自然な日本語の表記にしたいからだ。

Logoではワードを値として参照しているときは、頭に「:」を付ける。このlogoの「:」は、「thing "」の省略である。この手続き「thing」は文字列で示された名前の変数に与えられた値を返す手続きである。これをこの言語で実現するとすれば「の値」という述語になるだろう。

「:」でこの省略形を表現することで、logoではそのワードが手続きではなく、変数名として使われていることがはっきりと外見で分かるようにしてある。この用法はとても分かりやすいので、できれば倣ったほうがいいのだけど、日本語で書くときは見栄えがあまり良くない。できるだけ日本語らしく表記することを優先したいので、これを使わないことにする。述語「の値」の用意はするが。

そのため、ワードは次のように処理される。処理速度なんて最初から念頭に置いていない。これは動的な言語である。

■ワードの処理
1.述語として登録されているか調べ、候補を選ぶ。無ければ、3.へ
2.リストの並びを調べ、この候補が矛盾無く使えるか調べる。このとき、複数の述語が適合する場合は、「曖昧な表現です」という例外が発生し、解釈を中止する。一つならば、この述語の結果を持って、5.へ。
3.述語として登録されていないとき、もしくは述語が定義されていてもどれも矛盾してしまうときは、変数としてその名前が登録されているか調べ、登録されていればその値を結果とし、5.へ。
4.変数としても登録されていないときは、「このワードを知りません」という例外を発生させて、解釈を中止する。
5.結果をこのワードの値とする。

■文としてのリストの処理
リストの中のワードは、どのように解釈されるだろうか。答えは、リストはリストのままである。述語に処理されることによってはじめて要素は解釈の対象となる。つまり、制御文など、リストを文として解釈する述語が実行されるときになって、そのリストの内容が文として処理される。実際にはその時点でいわゆるeval関数が実行される。そのとき変数となるべきワードは変数として解釈される。これは手本にしているLogoをそのまま踏襲している。


とりあえずここまで考えておけば、後は作っていくうちになんとかなるだろう。Logo、特にUCBLogoの言語仕様を参考にして、それを日本語の文章を解釈できるようにかなり変形させている。実のところ、考え自体は数年前に漠然とできあがっていたのだけれど、日本語の解析ができずに困っていた。




拍手する
posted by takayan at 00:38 | Comment(0) | TrackBack(0) | 日本語プログラミング | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。