あとは気が向いたら適宜更新ブラウザだけでプログラムを組めてしかもその場で実行もできるというオールインワンインタプリタを作ってみました。SVGとCANVASのグラフィックも使えます。"CalcPad"」と名付けてここに公開いたします。本邦初公開!?他に類を見ない、純粋にブラウザ上のjavascriptで動くC言語類似の言語インタプリタ作成の記録です。無謀とも思えるこんなおバカな?チャレンジをやる人もまずいないと思うので、大変貴重な内容および成果と言っていいかと思います。なにはともあれお試しください。下のアイコンをクリックすると別窓にて表示されます。式の計算プログラムがセットしてあります。普通の計算をする感覚で複素数計算が可能です。約480kBこちらは最初に作った基本版。プログラム作成の部分は単なるテキストタイプです。プログラム作成をしないならこちらで充分です。約1.4MBこちらはさらにプログラムエディタとしてAceというエディタの一部機能を組み込んだものです。プログラムの作成、編集をするならこちらの方がいいかもしれません。プログラム窓左上の「書換保護」のチェックを外せばプログラム編集ができます。上記アイコンを右クリックで「名前をつけてリンク先を保存」などでローカルに保存すれば保存したプログラムはいつでもそのままブラウザで実行できます。外部参照は一切していませんのでインターネット接続環境も必要ありません。開いてブラウザの「ページを保存」メニューを使って保存するとブラウザによってはjavascriptが実行されたあとの結果のページが保存されるためうまく動作しません。以下はためしに作ってみた各種プログラムをAce版にプリセットしたCALCです。組込んである初期プログラムが違うだけであとは同じものです。基本版のも載せておきます。プログラムはローカルに保存し読み込めます。プログラムの言語コードがUTF-8なのでWindowsパソコンで他のソフトを使って別途編集したりしようとすると少しやりにくいかもしれません。入力された式を計算し結果を表示します。複素数の計算もできます。上記のものと同じですがこれだけ試しにオートスタートがかけてあります。複素数は使えませんが計算の桁数はブラウザの許す限り任意です。グラフィック機能を使ってかの有名なマンデルブロ集合を描きます。当初のから速度を改良し、さらに拡大位置などをマウスで簡単に設定できるようにしてあります。上記マンデルブロ集合描画プログラムで得られた見応えのあるところをいくつか集めてみました。お暇なときにでもご覧ください。二次方程式を解きます。係数での入力はもちろん、なんと式そのものを入力して解くこともできます。分数のままで四則演算を行います。正の整数を素因数分解します。指定の範囲の整数の階乗の値を計算して表示します。ディフォルトで0から1000の階乗まで表示します。与えられた範囲の素数を求めます。2つの正の整数の最大公約数を求めます。与えられた数式の定積分を数値積分して求めます。与えられた級数の指定範囲での和を求めます。指定された年のカレンダーを作成します。長さ、面積、重量などの単位を換算します。グラフィック機能を使ってランダムに図形を描き続けます。なんの役にもたたない最高にしょうもないプログラムです。グラフィック機能を使って関数のグラフを描きます。グラフィックの定番なのにうっかり忘れてました。代表的な図形の面積とできれば周囲の長さを計算します。グラフィックを使って簡単な樹の樹形を描きます。実際に樹を育てるよりは速いですがすごく時間がかかりますので(数時間から1日)、お暇な方だけどうぞ。樹を描くせっかく複素数計算ができるようにしたにもかかわらず実際は単に複素数という名を知っているというだけだったりして複素数を使った計算プログラムが少ないのはちと残念。(複素数を使うのは電子工学とか量子力学とか難しいのばかりなんだ。)以下は今回のチャレンジの発端、経過、実現のポイントなどの記録です。おバカなチャレンジにもそれなりの苦労がありましたので、読んでいただけるとたいへんうれしいです。私の机の上には常時2台のパソコンが稼働しています(サーバーとしてですがふだん使いにも兼用しています)。計算をするときには電卓も机の上においてあり、それでやります。計算が複雑になるとそれにメモ用紙が加わります。パソコンに電卓アクセサリーも入っていますが本物の電卓の方が使いやすいので電卓アクセサリーはほとんど使いません。考えてみればもともとは計算するために作られた機械ですから計算に使わない手はないのですが、少し複雑な計算になると手軽にできるかといえばそうでもありません。ブラウザはほぼ常時開いているので、試しにブラウザで計算するプログラムを組んでみます。/)やかっこ()などで数式を書いてEnterすると結果を表示します。計算式:→結果:上記の計算窓のソースは周りの枠も含めて以下のようなものです。計算をする(してもらう)。/></div></td></tr></table>計算にはjavascriptのeval()という関数を使っています。計算式を与えると計算して結果を返してくれます。肝は単にこれだけです。あまりに簡単すぎておもしろくありません。それに四則演算はいいとしても、sinやcosなどの数学関数を使おうとするとMath.sin()だのMath.cos()などとしなくてはなりません。javascriptはオブジェクト指向言語とやらで各種数学関数はMathオブジェクトの一部なのでこう書かなくてはならないということのようですが、よけいなお世話と押し付けも甚だしい。sinはsin()、cosはcos()で使えるようにしてくれたほうがずっとありがたい。javascriptのオブジェクト指向というのは利用者のためではなく作り手の都合を押し付けている部分が多いような気がします。Rubyの十分の一でも見習ってくれるといいんですけどね。それに対話的に値を入力して計算し結果をいろいろ比較してみたいなどということも簡単にはできません。2次方程式を解こうと思ったら根の公式に事前に値を代入してそれをそっくりすべて打ち込まなくてはなりません。...使い勝手はあまりよくありません。それに計算と言えば、なんと私は虚数とか複素数なんてのも知っているのですね。"魔法の数"虚数)を読んだのでした。→そうだ、複素数計算もできるプログラムを作ってみよう。javascriptには数学演算や数学関数もいちおう組み込まれてます。やってやれないことはないでしょう。...というわけで、複素数計算プログラムをつくり始めたのでした。単なる暇つぶしのプログラム遊び程度のつもりでした。...長かった寒い冬が過ぎて春のうららかな日差しにうきうきしながら開始したのでした。なくして複素数計算プログラムはできました。これくらいならさほど難しくはありません。備わっていれば、やる気になればだれでもできます。同じ値をいちいち幾度も打ち込まなくていいように変数がほしいな。比較判定などの条件判定や分岐処理もしたい。繰り返し計算もしたいな。配列や関数が定義できて使えればいいな。簡単なグラフィック機能も装備してグラフなど描ければいいな。構造化言語の基本機能はやっぱりほしくなります。プログラム遊びもなんだか本格味をおびてきました。javascriptの超高度なプログラミングへの挑戦です。いうものは昔からだいたいC言語でというのが常識みたいなもんだが、はたしてjavascriptでもできるかな?インタプリタでインタプリタを動かすとなるとめちゃ遅いのは覚悟の上だが、基本的にできないということはないだろう。それにブラウザというのはだれでもいつでも使える最も汎用的なアプリケーションだし、そこで簡単なプログラムが組めてしかも即実行できるとなればそれなりに意義はあるでしょう。言語ソフトもサーバーもコンパイルする手間も、とにかく何もいりません。言っても複素数はともかく、ブラウザ上のjavascriptでまともに動く構造化言語のインタプリタは見たことないな...それにjavascriptは不得手だし...などと少し不安に思いながらチャレンジを開始したのでした。...梅の花が咲いてじきに桜も楽しめそうです。変数はさほど苦労せずできました。配列に名前と値を設定しそれを読み書きするだけですから。...桜も咲いて春うらら。こんな陽気が続くといいけど。whileなどの制御構造も加えてみました。このへんから少し雲行きがあやしくなってきました。for,whileなどでループしている間ブラウザは固まったようになり、ループが長いと「このページのスクリプトは処理に時間がかかっているか応答しなくなっています。今すぐスクリプトを停止....」などという警告が出ます。...桜の花とともにできる自信がはらはらと...少しづつ散りはじめました。printやinputなどブラウザ画面との入出力関数を書いたところ、まともに動作しません。スクリプトが完全に終了してからどっとまとめて出力されたりinput欄が表示されたりで全く実用に耐えません。長いこといろいろとコードを書き換えたりして悪戦苦闘していましたが、一向にらちがあきません。このあたりまできて、普通の言語だったら全く意識すらしないこと、すなわちjavascriptは同期非同期、割込などの基本的制御がまともにできないということにやっと気がついたのです。(そんな記事はちらほら見てはいたのですが、まさかこれほどひどいとは思ってもいませんでした。)...ついに梅雨に入りました。