精霊は算数がお嫌い?
今回からは基本的に1日1回12時の投稿になります。
精霊語の授業は順調に進んだ。
辞書の精読も空いた時間をフルに使って進めていった。
その結果、精霊は計算ができないことがわかった。
「なんてこったい」
精霊語に足すも引くも掛けるも割るもなかった。
たまたま対応する精霊語が見つかっていないのか、そもそも計算という概念が精霊にないのか。
精霊は五回繰り返す、三回明かりを点滅させるのを六回繰り返すといった命令は理解するくせに、三掛ける六はいくつになるかという言葉を持たない。
「計算はできるが対応する言葉が発見されていないのか?」
回数を数えるためには少なくとも足し算ができなければならない。
ならばその言葉が発見されていないと考えたほうが良さそうだ。
「まあ、計算ができないということにはかわりないわけであるが」
どうしたものであろうか。
前に考えたコンピュータの最低限必要な要素である、計算、条件分岐、そして曖昧さの排除のうち、条件分岐は問題なかった。
if文やgoto文、gosub文のようなものは表現できそうだ。
曖昧さの排除も問題ない。
精霊語には同音異義語はなかったし、文脈で意味が変化する言葉もない。注意すれば曖昧さを排除可能であることがわかっている。
前に先生は発火の魔法を発動するための最小命令は【魔力を火に変換せよ】といったが、実はこれではうまく発動しない。
この文には魔力をどのくらい使用するかの記述はないし、火をどこに発生させるかの記述もない。
これでは変数を初期化せずに使うようなものだ。
当然コンピュータでも正しく動作しない。
変数が初期化されていないわけであるからどのような動作をしてもおかしくないのだ。
精霊語の場合ある程度人間の意思を反映できるが、意識しなければ精霊語もコンピュータ言語も同じだ。
逆に言えばコンピュータに命令するように精霊に命令すれば魔法は正しく発動する。
魔が正しく導かれるのだ。
しかし計算ができないのは計算外だった。
計算式は人間が作ったものだから理解できないのはまあいいとして、足したり引いたりする言葉がないのが痛い。
せめて足し算と引き算ができれば、後はなんとかなるのであるが。
「精霊を計算に使おうとする人がこれまでいなかったわけだ」
この世界での計算といえば暗算か筆算かそろばんに似た算盤を使うのがせいぜいだ。
公爵家の文官ともなれば暗算も算盤もとてつもなく早い。
だがそれでもコンピュータにはかなわない。
データを入力さえしてれば、昔の八ビットコンピュータでさえ何百人分の仕事をしてしまう。
「八ビットパソコンか。懐かしいな」
初めてパソコン(当時のマイコン)を買ったのは初任給後すぐだったか。
当時のパソコンは機能が少ない割に高かった。
一式揃えようと思えば安くても二〇万とか平気でしたものである。
性能も定年時とは比べ物にならないくらい低くて、メモリーも一六キロバイトとか三二キロバイトとかが普通で、四八キロバイトもあればかなり多いというそんな時代だ。
もちろんそんな高級機、一括で買えるはずもなく、二年だか三年のローンでようやく買ったのだ。
すぐに陳腐化したけどね。
その当時はパソコンの進化が早かったのだ。
あれよあれよという間にパソコンは一六ビットへそして三二ビット。
最後には六四ビット化してマルチコアとかいうものになってしまった。
クロック数もパソコンの初めの頃は一メガヘルツとか二メガヘルツくらいがせいぜいだったのに、最後にはギガとか、クロック数だけで一〇〇〇倍である。
だが八ビット機時代がプログラムしていて一番楽しかった気がする。
年寄りのノスタルジーかもしれないが。
八ビット機は遅いしメモリーも少なかったが、その分様々な工夫をするしかなかった。
今どきの最新マシンなら早さとリソースの多さに任せて力技でこなせたことも、当時のパソコンでは知恵と根性と情熱でなんとかするしかなかった。
速度がほしければマシン語(アセンブル言語)でプログラムを組み、一クロックを削り、BIOSを通さずハードを直接叩いて速度を稼ぐ。
そんな職人のような試みがいたるところでなされた。
機能よりも性能を上げるために血眼になったものである。
「まあ、今から考えれば本末転倒なんだろうけどな」
必要な機能を実現できれば、速度は二の次とは言わないが、必要十分あればいいはずである。
それがこの命令をこれに変えれば一クロック削れる。
この命令を使えば一バイトメモリーを減らせるなど、どうでもいいことに時間をかけたものである。
「掛け算とかも足し算とビットシフトに展開したっけなー」
当時のCPUは掛け算が苦手であった。
僕の使っていたやつだと、一バイト掛ける一バイトイコール二バイトの計算しかできず、それもものすごく遅くて、足し算とビットシフトに展開したほうがよっぽど早かったものである。
「あ――――、足し算引き算ができなくたって計算はできるじゃん」
昔を懐かしんでいたら、あることに思い至った。
そもそもコンピュータだって四則演算を理解していないのだ。
だが理解していなくても計算はできる。
ならば精霊にだって計算させることができるはずだ。
コンピュータはデジタル処理が得意というが、実際のところはそのほうが効率がいいからだ。
二進数である1と0の世界は単純故に電子回路で表現しやすい。
例えば足し算なら0+0、1+0、0+1、1+1の組み合わせしかなく、入力を四つに分岐する回路と桁上りの回路を作れば足し算が実現できる。
十進数も同じことが出来ないわけではないが、10×10で百のパターン分けが必要になり、これを電子回路で表現するとなるとかなり面倒くさいことになる。
しかし精霊にやらせる場合は別だ。
百個の2次元配列が用意できればあとはそこから一桁分ずつ値を取り出し、変換していくだけである。
筆算でやるのと同じ原理だ。
二進数だろうが八進数だろうが一二進数だろうが同じように配列を作ってやって、対応する値を取り出していけばいい。
変数については問題ない。
起動キーワードの宣言文は変数の宣言文としても使えるはずだ。
【変数Aを1とする】といった文が作れるので、これは変数への代入に使える。
変数Aと変数Bに数値を入れて、起動キーワードによって計算ルーチンを呼び出だし変数Cに入れるシーケンスを作れば計算ができるはず。
「できる。できるぞ! 僕のコンピュータが」
ここまで確認できればあとは作るだけである。
僕はどんなコンピュータを作るか構想をまとめていった。
ネタを突っ込むために精霊語の構造に結構無理があるかもしれませんがご容赦願います。
言語上の不備を回避するネタがこれしか思いつかなかったので、算数ができないこととしました。
今後も精霊語とプログラミング言語の違いをすり合わせるのに、ちょっと無理な感じにすり合わせがあるかもしれません。