[再]君は逆ポーランド電卓を知っているか? ~そして自作へ

デイリーポータルZ

逆ポーランド記法で計算する電卓について語ります

一般にはあまり知られていない電卓がある。その名は「逆ポーランド電卓」(「RPN電卓」とも言う)。計算方法が普通の電卓とは違っており、使い方を知らないと1+1の計算すら困難な代物だ。

製造しているのは、ほぼHP(ヒューレット・パッカード)一社のみ。それも高機能で比較的高価な機種しか出回っていないため、気軽に持ち歩いて使うには少し躊躇してしまう。

もっと気軽に逆ポーランド電卓を使いたい。最近ではスマホアプリがあるけれど、いやいや、やはり電卓はボタンをポチポチするに限るのだ。市販品がないならば、もう自作するしかない……!

いきなり込み入った話で何がなんやらだと思うので、これから順番に説明させて下さい。

逆ポーランド記法とは

世の中には、大きく分けて2種類の電卓がある。ほとんどの人が使っている普通の電卓(「中置記法の電卓」という)と、入力方法の異なる「逆ポーランド記法の電卓」だ。

これが逆ポーランド電卓(HP-16C)。どこにも“=”キーがなく、反面デカデカと“ENTER”キーがあるのが特徴

電卓の紹介をする前に、まずは「逆ポーランド記法」ってなんだ? という点について説明する必要がある。めんどうだけど、少しお付き合い下さい。

言語にはいろんな語順がある。日本語だと「主語→目的語→動詞」だけれど、英語だと「主語→動詞→目的語」となるように。それと同様に数式にも種類があって、記法ごとにいろんな記載順序があるのだ。

記法ごとに演算子(+)の位置が異なっている

一般的に使われているのは中置記法だ。一方でポーランド記法は、演算子(+)が数字の前に、逆ポーランド記法は数字の後に記載される。今回注目したいのは、この「逆ポーランド記法」の方である。後で説明するが、この記法はコンピュータプログラムとの相性も良く、いまも電卓の世界などで愛され、生き続けている。

また「1 2 +」という順番は、「1と2を足す」という日本語の語順にも一致しており(日本語文法は逆ポーランド記法に近い)、日本人には比較的なじみやすい記載順なのだ。

ちなみに「ポーランド」記法という名前は、ポーランドの論理学者ヤン・ウカシェヴィチが考案したことに由来するという。「ウカシェヴィチ記法」とせずに、自国の国名を付けた彼の奥ゆかしさはわりと好きである。

逆ポーランド記法があると何がうれしいか

これだけ見ると「ただ演算子の位置が違うだけじゃないか!」と思えてしまうのだけれど、どっこい、ちゃんとメリットがある。

逆ポーランド記法の良いところは、カッコや演算子の優先順位を気にしなくてもいい点にある。

中置記法の場合は、カッコがあれば先に計算する、“+-”より“×÷”の方を先に計算する、というルールがある。逆に言うと、カッコがないと計算式を表現できない。計算するときには最初に式全体を把握し、計算順を見極めないといけない
それが逆ポーランド記法だとこうなる。カッコがなくなり、左から右へ順に読んでいくだけで正しい計算ができるのだ。この数式を日本語に訳して読むと、「100から、2と3を足したものと、4と5を足したものを掛けたものを引く」になる。とても直球な書き方

こんな風に数式を逆ポーランド記法であらわせば、ややこしい計算順序とはおさらばだ。ただ左から右に素直に読んでいくだけで、誰がやっても一意に答えを導き出すことができる。すごいぞ、逆ポーランド記法。

もちろん中置記法も逆ポーランド記法も、どっちも同じ意味を持つ数式である。でも演算子の位置が違うだけで、まるで別物に見えるのが面白い。日常的に見慣れたものとは微妙に異なる、でもどこか似ている表現方法。もし並行世界が存在したならば……きっとそこでも同じ数学の概念はあるだろうけど、記法は微妙に違っていても不思議ではない。ひょっとすると、逆ポーランド記法が主流の世界が存在するかもしれない。そんな妄想をしてみるもの楽しい。

逆ポーランド電卓ってのがあるんです

で、話はようやく電卓である。この逆ポーランド記法で計算する電卓が存在しており、それこそが「逆ポーランド電卓」(正確には逆ポーランド記法の電卓だが、ここでは逆ポーランド電卓と呼ぶ)なのだ。

私が持っている電卓のひとつ、1976年に発売された「HP-97」。捨てられそうになっていたところを譲り受けた。定価は168,000円もしたらしい

HPは1960年代から逆ポーランド電卓の製造を開始。いまに至るまで連綿と続いている歴史ある電卓である。

左が、2021年現在でも入手容易な「HP 35s」。右は「HP-16C」というプログラマ向けの電卓で、2進数や16進数の計算がしやすいのが特徴という貴重な機種

なんで何個も持っているのかと言うと、単純に逆ポーランド電卓が好きだからだ。複雑な式になるほど、カッコを使う必要がないため計算がしやすい。慣れれば通常の電卓よりも早く操作可能であり、愛好者が多くいるのもうなずける。

あとはやはり、逆ポーランド記法にただよう異世界感だろう。日常ではほとんど見ない表現なのに、ちゃんと定義があり、しかもその通り動く電卓まで存在している。逆ポーランド記法が普通の世界がそこにはあって、電卓というインターフェースを通じて簡単に足を踏み入れることができるのだ。なんだか触っていてワクワクするのである。

そうそう、名前もいい。「逆ポーランド」(英語ではReverse Polish)という裏世界みたいな呼び方が最高である。

いまだとスマホアプリがたくさん出ているので、気になった方はまずそれを触ってみたらいいかも。

逆ポーランド電卓の使い方

逆ポーランド電卓には“=”キーがなく、逆に‘“ENTER”キーがあるのが特徴だ。どうやって使うのかを簡単に紹介しておこう。

入力する際は数字の区切りが必要なため、間に“ENTER”キーを押して電卓に知らせるようになっている。そして演算子を押した瞬間に答えが出るため、イコールが必要ない
実際に計算してみた様子がこちら

使い方を知らないと1+1すら計算できない、というのが分かっていただけただろうか。

そんな逆ポーランド電卓だけれど、古い人気機種は中古価格も高く、上で使っている「HP-16C」(1982年発売)も約3万円が相場になっている。ちょっと持ち出して使おうと思っても、なかなか躊躇してしまう値段。

いまではスマホアプリにお株を奪われてしまったけれど、思い起こせば普通の電卓はバラエティ豊富だった。カード式や、キーホルダー型などなど。おもちゃ感覚で作られ、それをみんなが使っていた。あの感じが、逆ポーランド電卓にも欲しい。

でもまあ、今からそんな状況になることはまずないだろう。みんながキーホルダーとして逆ポーランド電卓をぶら下げて、気軽に逆ポーランド記法で計算する……そんな時代は永遠にやって来ないのだ。

でも……実はひとつだけ方法がある。自分で作ってしまえばいいのである。キーホルダー型の逆ポーランド電卓を!

逆ポーランド電卓を作りましょう

とその前に、逆ポーランド記法とコンピュータプログラムの相性の良さについて話しておきたい。

逆ポーランド記法を使った計算をコンピュータ上で実現するためには、「スタック」と呼ばれるデータ構造を利用する。スタックとは、スーパーのカゴのようなものだ。

これをイメージして欲しい

カゴは下から上に積み上げられる。そして上から入れて、上から取り出すことしかできない。よって最後に入れたカゴが、すなわち次に来た人が最初に取り出すカゴになる。この後入れ先出しの構造をスタックという。

ところで、スーパーのカゴがこのスタック構造になっているせいで、下の方にあるカゴはほとんど使われる機会がなくて不憫だなと見るたびに思う。つねに上のカゴの重さに耐えているだけで、いつまで経っても順番が回ってこない下のカゴ。かわいそうな下のカゴ、という絵本が書けそうだ。

……話は戻るが、そのスタック構造を使って、逆ポーランド記法の計算をする様子がこちら。

値が入力されるとスタックに積む。演算子(“+”など)が入力されると、値をスタックから2つ取り出して演算する。その後、結果をスタックに積む。この単純な繰り返しだけで、逆ポーランド記法の計算ができる

逆ポーランド記法とスタックの相性は抜群で、情報工学をやっているとこの例を目にすることも多い。ここまで分かりやすい手続き(アルゴリズム)に落とし込めるので、プログラムを書くのも(細かいことを気にしなければ)簡単にできてしまう。

何よりこういう動作原理を知っていくにつれ、どんどん逆ポーランド電卓が愛おしくなっていくのだ。その土地の歴史を知ればしるほど、さらなる興味と愛着がわいてくるようなものである。

そんなわけで、ここまで理解できれば逆ポーランド電卓を自作するのはそんなに難しくない。作っていこう、逆ポーランド電卓。

部品を集めて組み上げる

やっぱりキーホルダー型のかわいい感じの電卓が欲しいよねー、という脳内会議の結果、往年のテトリン(テトリスができるキーホルダー型ゲーム機)みたいなイメージを目指して制作開始。

ボタンと表示器部分はこんな感じがいいかな。カラフルなボタンでかわいさを演出
基板を2層にして、下層にはマイコンや電源を置く

主要部品は、電卓の頭脳となるマイコン(Arduino互換のProMicroと呼ばれるもの)と、あとはボタンと表示器(0.91インチOLED)というシンプルな構成。

表はシンプルだけど、裏はこんな感じで「水面下のアヒルの水かき」状態になってしまった

一度ミスをしてやり直したせいで、配線作業だけで5時間くらいかかってしまった。でもこういう細かい作業は嫌いではない。この配線一本一本に電流が流れ、それがちゃんと理論どおりに動いてくれる。こんな奇跡みたいなことが普通に起こっているなんて、すごすぎるだろ……! と思いながらいつも電気と戯れている。

フロント部分のパネルは、レーザーカッターで透明アクリルを切り出して作成
一家に一台、レーザーカッター。実は去年自宅に設置したのだ。いいでしょう
あとはスペーサーを3Dプリンタで印刷する。家の機材総動員
基板とフロントパネル、スペーサーをこのように挟み込んで完成である

ソフトウェアについては前述の通り、スタックの操作をすればいいだけで、あまり難しいものではない。HPの電卓にならって、スタックを4段使った4 Level RPNという方式で実装した。

ででーん。そんなわけで完成。結構かわいくイメージ通りにできた。これぞ欲しかった逆ポーランド電卓だ!
キー配置はこの通り。ほとんどは一般的な電卓と同じで、違うのは“=”の代わりに“Enter”があるところ
こういうおもちゃ的な逆ポーランド電卓がいっぱい製品化されている世界線に暮らしたかった

紹介動画を作ったので、動いているところはこちらをどうぞ。

[embedded content]

おわりに

逆ポーランド電卓は、ただの電卓ではない。実用性だけでなく、逆ポーランド記法の特性や、特有の計算方法、スタックによる実装などなど、内部動作を理解していくことでどんどん味わい深くなっていく、スルメのような電卓である。

新製品も長らく出ていないため今後どうなるか分からないけれど、いまなら比較的簡単に自作することだってできる。いろんな形態の自作逆ポーランド電卓が出てくれば、楽しい世の中になるなあと思ったり。

初めての方は、先にも書いたとおりスマホアプリが気軽に使えるので、まずはそっちを試してみるのがオススメである。

作った電卓はカバンにつけて持ち歩こう

参考文献:
・徳田雄洋 文, 村井宗二 絵『カッコのない国』岩波書店, 1990年
・Hewlett-Packard『HP-16C Computer Scientist Owner’s Handbook』1984年

昔つくった逆ポーランド電卓

いまから16年ほど前、大学のマイコン実習の自由課題でも逆ポーランド電卓を作ったのを思い出した(その頃から好きだったのだ)。

写真が残っていた

当時はArduinoなんてなかったので、PICというマイコンを使って実装。表示も7セグメントLEDで、いま見るとかなり古めかしい。

あれから16年。扱いやすいマイコンや周辺デバイスもたくさん登場し、個人で3Dプリンタやレーザーカッターまで使えるようになった。ここまで歩みを進めてきた人類すげえなあ、と改めて思うのであった。

Source