昔つくった逆ポーランド電卓
いまから16年ほど前、大学のマイコン実習の自由課題でも逆ポーランド電卓を作ったのを思い出した(その頃から好きだったのだ)。
当時はArduinoなんてなかったので、PICというマイコンを使って実装。表示も7セグメントLEDで、いま見るとかなり古めかしい。
あれから16年。扱いやすいマイコンや周辺デバイスもたくさん登場し、個人で3Dプリンタやレーザーカッターまで使えるようになった。ここまで歩みを進めてきた人類すげえなあ、と改めて思うのであった。
一般にはあまり知られていない電卓がある。その名は「逆ポーランド電卓」(「RPN電卓」とも言う)。計算方法が普通の電卓とは違っており、使い方を知らないと1+1の計算すら困難な代物だ。
製造しているのは、ほぼHP(ヒューレット・パッカード)一社のみ。それも高機能で比較的高価な機種しか出回っていないため、気軽に持ち歩いて使うには少し躊躇してしまう。
もっと気軽に逆ポーランド電卓を使いたい。最近ではスマホアプリがあるけれど、いやいや、やはり電卓はボタンをポチポチするに限るのだ。市販品がないならば、もう自作するしかない……!
いきなり込み入った話で何がなんやらだと思うので、これから順番に説明させて下さい。
世の中には、大きく分けて2種類の電卓がある。ほとんどの人が使っている普通の電卓(「中置記法の電卓」という)と、入力方法の異なる「逆ポーランド記法の電卓」だ。
電卓の紹介をする前に、まずは「逆ポーランド記法」ってなんだ? という点について説明する必要がある。めんどうだけど、少しお付き合い下さい。
言語にはいろんな語順がある。日本語だと「主語→目的語→動詞」だけれど、英語だと「主語→動詞→目的語」となるように。それと同様に数式にも種類があって、記法ごとにいろんな記載順序があるのだ。
一般的に使われているのは中置記法だ。一方でポーランド記法は、演算子(+)が数字の前に、逆ポーランド記法は数字の後に記載される。今回注目したいのは、この「逆ポーランド記法」の方である。後で説明するが、この記法はコンピュータプログラムとの相性も良く、いまも電卓の世界などで愛され、生き続けている。
また「1 2 +」という順番は、「1と2を足す」という日本語の語順にも一致しており(日本語文法は逆ポーランド記法に近い)、日本人には比較的なじみやすい記載順なのだ。
ちなみに「ポーランド」記法という名前は、ポーランドの論理学者ヤン・ウカシェヴィチが考案したことに由来するという。「ウカシェヴィチ記法」とせずに、自国の国名を付けた彼の奥ゆかしさはわりと好きである。
これだけ見ると「ただ演算子の位置が違うだけじゃないか!」と思えてしまうのだけれど、どっこい、ちゃんとメリットがある。
逆ポーランド記法の良いところは、カッコや演算子の優先順位を気にしなくてもいい点にある。
こんな風に数式を逆ポーランド記法であらわせば、ややこしい計算順序とはおさらばだ。ただ左から右に素直に読んでいくだけで、誰がやっても一意に答えを導き出すことができる。すごいぞ、逆ポーランド記法。
もちろん中置記法も逆ポーランド記法も、どっちも同じ意味を持つ数式である。でも演算子の位置が違うだけで、まるで別物に見えるのが面白い。日常的に見慣れたものとは微妙に異なる、でもどこか似ている表現方法。もし並行世界が存在したならば……きっとそこでも同じ数学の概念はあるだろうけど、記法は微妙に違っていても不思議ではない。ひょっとすると、逆ポーランド記法が主流の世界が存在するかもしれない。そんな妄想をしてみるもの楽しい。
で、話はようやく電卓である。この逆ポーランド記法で計算する電卓が存在しており、それこそが「逆ポーランド電卓」(正確には逆ポーランド記法の電卓だが、ここでは逆ポーランド電卓と呼ぶ)なのだ。
HPは1960年代から逆ポーランド電卓の製造を開始。いまに至るまで連綿と続いている歴史ある電卓である。
なんで何個も持っているのかと言うと、単純に逆ポーランド電卓が好きだからだ。複雑な式になるほど、カッコを使う必要がないため計算がしやすい。慣れれば通常の電卓よりも早く操作可能であり、愛好者が多くいるのもうなずける。
あとはやはり、逆ポーランド記法にただよう異世界感だろう。日常ではほとんど見ない表現なのに、ちゃんと定義があり、しかもその通り動く電卓まで存在している。逆ポーランド記法が普通の世界がそこにはあって、電卓というインターフェースを通じて簡単に足を踏み入れることができるのだ。なんだか触っていてワクワクするのである。
そうそう、名前もいい。「逆ポーランド」(英語ではReverse Polish)という裏世界みたいな呼び方が最高である。
いまだとスマホアプリがたくさん出ているので、気になった方はまずそれを触ってみたらいいかも。
逆ポーランド電卓には“=”キーがなく、逆に‘“ENTER”キーがあるのが特徴だ。どうやって使うのかを簡単に紹介しておこう。
使い方を知らないと1+1すら計算できない、というのが分かっていただけただろうか。
そんな逆ポーランド電卓だけれど、古い人気機種は中古価格も高く、上で使っている「HP-16C」(1982年発売)も約3万円が相場になっている。ちょっと持ち出して使おうと思っても、なかなか躊躇してしまう値段。
いまではスマホアプリにお株を奪われてしまったけれど、思い起こせば普通の電卓はバラエティ豊富だった。カード式や、キーホルダー型などなど。おもちゃ感覚で作られ、それをみんなが使っていた。あの感じが、逆ポーランド電卓にも欲しい。
でもまあ、今からそんな状況になることはまずないだろう。みんながキーホルダーとして逆ポーランド電卓をぶら下げて、気軽に逆ポーランド記法で計算する……そんな時代は永遠にやって来ないのだ。
でも……実はひとつだけ方法がある。自分で作ってしまえばいいのである。キーホルダー型の逆ポーランド電卓を!
とその前に、逆ポーランド記法とコンピュータプログラムの相性の良さについて話しておきたい。
逆ポーランド記法を使った計算をコンピュータ上で実現するためには、「スタック」と呼ばれるデータ構造を利用する。スタックとは、スーパーのカゴのようなものだ。
カゴは下から上に積み上げられる。そして上から入れて、上から取り出すことしかできない。よって最後に入れたカゴが、すなわち次に来た人が最初に取り出すカゴになる。この後入れ先出しの構造をスタックという。
ところで、スーパーのカゴがこのスタック構造になっているせいで、下の方にあるカゴはほとんど使われる機会がなくて不憫だなと見るたびに思う。つねに上のカゴの重さに耐えているだけで、いつまで経っても順番が回ってこない下のカゴ。かわいそうな下のカゴ、という絵本が書けそうだ。
……話は戻るが、そのスタック構造を使って、逆ポーランド記法の計算をする様子がこちら。
逆ポーランド記法とスタックの相性は抜群で、情報工学をやっているとこの例を目にすることも多い。ここまで分かりやすい手続き(アルゴリズム)に落とし込めるので、プログラムを書くのも(細かいことを気にしなければ)簡単にできてしまう。
何よりこういう動作原理を知っていくにつれ、どんどん逆ポーランド電卓が愛おしくなっていくのだ。その土地の歴史を知ればしるほど、さらなる興味と愛着がわいてくるようなものである。
そんなわけで、ここまで理解できれば逆ポーランド電卓を自作するのはそんなに難しくない。作っていこう、逆ポーランド電卓。
やっぱりキーホルダー型のかわいい感じの電卓が欲しいよねー、という脳内会議の結果、往年のテトリン(テトリスができるキーホルダー型ゲーム機)みたいなイメージを目指して制作開始。
主要部品は、電卓の頭脳となるマイコン(Arduino互換のProMicroと呼ばれるもの)と、あとはボタンと表示器(0.91インチOLED)というシンプルな構成。
一度ミスをしてやり直したせいで、配線作業だけで5時間くらいかかってしまった。でもこういう細かい作業は嫌いではない。この配線一本一本に電流が流れ、それがちゃんと理論どおりに動いてくれる。こんな奇跡みたいなことが普通に起こっているなんて、すごすぎるだろ……! と思いながらいつも電気と戯れている。
ソフトウェアについては前述の通り、スタックの操作をすればいいだけで、あまり難しいものではない。HPの電卓にならって、スタックを4段使った4 Level RPNという方式で実装した。
紹介動画を作ったので、動いているところはこちらをどうぞ。
逆ポーランド電卓は、ただの電卓ではない。実用性だけでなく、逆ポーランド記法の特性や、特有の計算方法、スタックによる実装などなど、内部動作を理解していくことでどんどん味わい深くなっていく、スルメのような電卓である。
新製品も長らく出ていないため今後どうなるか分からないけれど、いまなら比較的簡単に自作することだってできる。いろんな形態の自作逆ポーランド電卓が出てくれば、楽しい世の中になるなあと思ったり。
初めての方は、先にも書いたとおりスマホアプリが気軽に使えるので、まずはそっちを試してみるのがオススメである。
参考文献:
・徳田雄洋 文, 村井宗二 絵『カッコのない国』岩波書店, 1990年
・Hewlett-Packard『HP-16C Computer Scientist Owner’s Handbook』1984年
いまから16年ほど前、大学のマイコン実習の自由課題でも逆ポーランド電卓を作ったのを思い出した(その頃から好きだったのだ)。
当時はArduinoなんてなかったので、PICというマイコンを使って実装。表示も7セグメントLEDで、いま見るとかなり古めかしい。
あれから16年。扱いやすいマイコンや周辺デバイスもたくさん登場し、個人で3Dプリンタやレーザーカッターまで使えるようになった。ここまで歩みを進めてきた人類すげえなあ、と改めて思うのであった。
▽デイリーポータルZトップへ | ||
▲デイリーポータルZトップへ | バックナンバーいちらんへ |