読者です 読者をやめる 読者になる 読者になる

EVAL

ここは、今からやろうとしていることを適当に書いていく場所にしよう。とりあえず。

式を計算するソフトを作りたい。「3*(4+5)」といれたら「27」と返してくれるような。とりあえず再帰的にカッコの中を計算していくようにして、カッコのない式を計算する問題に帰着できる。演算子を文字列として、とりあえず、演算子に使われる文字は演算子以外には使われないということで。文字列はstd::stringが楽かなあ。速度をどこまで求めるかも迷うところ。迷うと何も作れない。

stringを使うとして、数と演算子に区切って、数はclassとして持つ。そのclassは演算子の演算をする関数を持つ。+=とかをオーバーロードするか、あるいはstatic関数として持つか。c=a+b よりもa+=b のが速い気もするんだよなあ。あ、数はdoubleとは限らず、分数クラスとかも後から作れば使えるような設計にしておく。とりあえずはdoubleで作る。

kmとかbpsとかの単位も持てるようにしたい。演算子、単位、数の順に拾って問題ないのかなあ。例えばmod演算子を使えるようにしたら何か問題あるだろうか。modで始まる単位でもない限り大丈夫そうに思うけど。まあ作ってから。

doubleで四則演算するだけなら簡単そうだなあ。でもまだできてないのは、ああ、演算子をハードコーディングしちゃまずいよねとかで迷ってるんだ。んー、まあ文字列リテラルの配列でやっちゃうか。要はポインタの配列だから作り直すときもそこに接続すればいい。数字は10種類しかないよな。あと小数点か。1e+10みたいなのは、いやあ、とりあえずなしで。冪乗演算子を後で加えればいいでしょ。だめか。いやそれにしてもeが入るのはパースめんどい。「e」という演算子を禁止する罪の重さがわからない。いやいっそ演算子にしてしまうのか?いやそれは筋良くないだろ。まああとからでも追加できんじゃね。

というわけで、作ろう。