日本語で計算するプログラム先日の「MeCabで日本語インタプリタ」以来文章の中で考えているだけで、プログラムそのものを改良していなかったので、日本語計算インタプリタをちょっと拡張してみた。前回より少しまともになった。前回は決められた述語に、数値を入れるだけのことしかできなかったけれど、その数値の所に再帰的に文を使えるようにした。一行に続けて他の文も書けるし、漢数字も解釈できるようにした。実用的なプログラムではないので、これが人の役に立つというわけでもない。前回公開したものよりも、こちらのほうが作りたいものを表現できているので、今回も公開することにする。いままで書いてきた仕様はまだ満たしていないし、ずれている。全体像が見えてくるのはまだまだ先のことになるだろう。主な操作法を書いておくと;実行するとDOS窓が立ち上がる。漢字入力が中心なので、ALT+半角/全角キーで切り替える。「たす」「ひく」「わる」「かける」「割った余り」「くっつける」といった言葉を助詞をつけて書いて、エンターを押すと、その答えを表示してくれる。今回から、述語を組み合わせて使えるようになったので、「1と2を足した値に3を足す」とか目的語の部分に既定の述語を使った名詞節をおくことができるようになった。日本語らしく接続するために「〜した値」「〜した答え」「〜した結果」という表現なども使えるようにした。文末の表現としても「〜ます」「〜して、」といった表現もできる。「命令形」もたいてい受け入れてくれる。いうのはmecabによる解析のおかげだが、単純なことしかやっていないのでもっと工夫すれば正確な表現もできるようになるだろう。思い通りの語形変化を選んでくれないので、mecabの辞書も独自のものを作った方が処理が楽になるだろう。前の文の結果を参照する言葉として、「その結果」「その答え」などの述語が使える。結果を受けるこの言葉は、同じ行で使ってもいいし、エンターした後、次の行で使ってもいい。計算は整数演算だけしか対応していない。唯一「くっつける」は文字列演算のサンプルだ。制御構造を文の形で定義できるので、案外単純な仕組みで作れるだろう。一般的なプログラミング言語よりは楽だろう。いうところはLispの親戚らしい特徴だと思う。お気楽にPythonで作っているのも楽な理由だろうけど。クラスをもっと徹底的に使って作るべきなのだろうが、今は構造体的なものとしてしか使っていない。どんなデータ構造が必要なのかを実際プログラムを作りながら探している段階なので、全体像が分かってからクラスの中にクラスのメンバになるべき関数を移動させていくつもりだ。それにいくつかのファイルに分割していかないとどんどん分かりにくくなってる。一つのファイルだけで処理系を描ききることができれば、それはそれで面白いかもしれないが。千を十で割った値を三で割ります。その答えに三をかけて、一をその結果に足します。結果が出力されて、次のようになる。