コンテンツにスキップ

このWebサイトは、管理人が個人的に書き留めている備忘録です。それ以上でもそれ以下でもありません。
誤記・誤解・誤謬を含め、記述内容の確度を一切保証しません。責任を負いません。問い合わせ等を受け付けません。
This Mediawiki is a personal memorandum written by Administrator, nothing more, nothing less.
Administrator do NOT guarantee accuracy of content, including any errors, misunderstandings, fallacies, take NO responsibility, do NOT accept inquiries anything of the sort.

RPN電卓/序説

提供: Memorandum
2025年5月5日 (月) 07:29時点におけるWebmaster (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
メインページ > RPN電卓/序説

1968年、Hewlett-Packard Companyから「部屋を占拠するミニコンピュータに勝るとも劣らない、机上に置ける計算機」として4,900ドルで発売されたHP-9100Aが世界初のRPN電卓である。その4年後の1972年2月1日に395ドルで発売されたHP-35は世界初の可搬型ポケット関数電卓でもあるが、これもRPN電卓である。この世に電子式卓上計算機=電卓が出た当初は、電卓といえばRPN電卓だったのだ。

しかし、それから55年経った2023年時点で新品が購入できるRPN電卓は、残念ながら、俗にいう金融電卓のHP-12Cが1機種のみだ。こうなった経緯は歴史と現在から各機種の概説を順を追ってお読みいただくと解るかもしれない。

ここでは、RPN電卓がふつうの電卓と著しく異なる点を記載する。外観を一瞥して判るのは、ふつうの電卓に必ずある = キーが無く、その代わりに一際大きな ENTER キーが有ることで、そのため操作方法もふつうの電卓とは違う。

なぜ違うのか。なぜこのような電卓が世に出て、そして、忘れ去られようとしているのか。

以下では序説として「RPN電卓とは何なのか」を述べる。

記法

現在市販されている電卓では、演算させたい数値(被演算子オペランド)と四則演算記号(算術演算子オペレータ)や関数を入力する順番が2種類ある。ちゅう記法こう記法だ。

中置記法(Infix Notation)は、算術演算子を被演算子の間に置く。例えば「『5と7の和』と『8から3の差』の積」を中置記法で立式すると、5と7と8と3が被演算子、+とーと×が算術演算子なので、

(5+7)×(83)

となる。これは現代の初等数学教育で教授される西洋数学で使用する数式とまったく同じで、日本では文部科学省が告示している学習指導要領では加算・減算を小学1年(6〜7歳)、乗算を小学2年(7〜8歳)、除算を小学3年(8〜9歳)算術演算子の優先順位を中学1年(12〜13歳)で教授するよう規定しているが、その間、初等教育(小学校) → 前期中等教育(中学校) → 後期中等教育(高等学校)[1]と一貫して数式の記法は中置記法のみなので、否が応でも馴染んでいる。一般的には数式=中置記法と断言して良かろう。ふつうの電卓とは、中置記法の電卓を指す。

対して後置記法(Postfix Notation)は、算術演算子を被演算子の後ろに置く。先ほどの「『5と7の和』と『8から3の差』の積」を後置記法で立式すると

57+83×

となる。先ほどの中置記法と見比べると、同じ演算内容を示しているにもかかわらず、演算子の優先順位を示すかっが排除されていることが判る。後置記法は、数式から括弧を排除し、数式の解釈(演算順位)を明確化するために考案されたからだ。また、副次的な利点として、後置記法の数式を左から順に日本語でそのまま読むだけで和訳(文章題に変換)できる。この例であれば「『5と7を足したもの』と『8から3を引いたもの』を掛ける」即ち「『5と7の和』と『8から3の差』の積」となる。この利点は日本語の文法から来るものだが、その意味では後置記法は日本人と親和性が高い(かもしれない。少なくとも管理人には親和性が高い)。

後置記法は一般に逆ポーランド記法:Reverse Polish Notationと呼ばれているため、入力の順番に後置記法を採用している電卓は世界的にRPN電卓と呼ばれる。

なお、後置記法とは対義関係になるぜん記法(ポーランド記法:Polish Notation)も存在するが、これが電卓に採用された例は寡聞にして知らない。その理由は、前置記法を電卓の演算ロジック(ソフトウェア)に落とし込んでみると、中置記法や後置記法より動作が複雑で無駄が多くユーザにも不便だと判るからだろう。これは最後に考察する。念のため先ほどの「『5と7の和』と『8から3の差』の積」を前置記法で立式すると

×+5783

となり、被演算子と算術演算子の位置が後置記法の対照となる。

前置記法をポーランド記法、後置記法を逆ポーランド記法と別称する理由は、ポーランドの論理学者Janヤン Łukasiewiczウカシェヴィチが、先に前置記法を、後で後置記法を考案したからだ。時系列としては、算術演算子と被演算子を分離し、算術演算子を前に、被演算子を後ろに記述することで、二項演算で括弧を排除しつつ一意に表記できるとŁukasiewiczが論文で公表したのが1924年、それらを逆に配置しても同様だとŁukasiewiczが論文で公表したのが27年後の1951年である。

ではなぜŁukasiewiczは先に前置記法を考案したのか。これは恐らくヨーロッパ圏で使用されている言語の文法から来たものと愚考している。例えば「5+7=」を文章題として書き起こすことを考えてみる。算数の文章題は書き起こすと命令文になるが、命令文は主語(S)が取れ、動詞(V)は算術演算子を指すため、目的語(O)である2つの数詞を含めそのまま書き下すと、SOV型である日本語では「5と7を加えよ」と動詞が文章の最後に置かれるOV型の後置記法に、SVO型である英語やポーランド語では “Add five and seven.” や „Dodaję pięć i siedem.” と動詞が文章の先頭に置かれるVO型の前置記法になる。話者が常用する文法としては決定的な差であり、ときに日本語話者が外国語を学ぶ際に高い壁を作るが、この差が、日本では後置記法が受け容れられ易く、ポーランド人のŁukasiewiczが前置記法を先に考案した理由ではないだろうか。

そして、もしこの推測が正しいとすると、ここから想像されるのが「RPN電卓が廃れた一因」である。地球上に山ほどある言語体系のうち「動詞が文章の先頭(もしくは主語の直後)に置かれる文法」と「動詞が文章の最後に置かれる文法」の比率がどの程度なのか、管理人は言語学に不案内なので把握していない[2]が、前者が多いのであれば、人間が楽をするための道具で不便なものは購入しないだろう。ユーザが頭の中で文章題を作成・読解する文法(論理)が前置記法なのに、後置記法であるRPN電卓ではわざわざひっくり返して入力しなければならない…こんな面倒なことをさせられるぐらいなら、学校で教授されることで慣れ親しんでいる中置記法をそのまま入力できる、ふつうの電卓を購入するのが当然というものだ。

いずれにしろ、現代の電卓市場で、RPN電卓の存在感は皆無に等しい。

以降、本サイトでは後置記法をRPNと表記する。

スタックマシン

RPNと非常に相性が良く、ハードウェアもソフトウェアも最小限で済むことから、事実上のコンビとして使用される概念にスタックマシンがある。RPN電卓特有の操作方法はスタックマシンであるがゆえのもので、管理人が把握している限り、スタックマシンではないRPN電卓を見たことが無い。

計算機工学におけるコンピュータアーキテクチャによるスタックマシンの学問的な定義は

中間結果格納用にLIFO(Last In, First Out:後入れ先出し)形式でアクセス制限したスタック(stack)と呼ぶメモリを使用する計算機

となる。

LIFO形式とは、最初に記憶した内容は最後に、最後に記憶した内容は最初に取り出すことができ、それらが無くなれば格納場所は空になるというデータ格納方式をいう。 スタック(stack)とは、その英単語訳通り「箱にモノを入れて積み上げるような動作や状態」を指す。

書類を綴じて保存するフラットファイルを思い出せば解り易いかもしれない。メモを書いたレポート用紙をフラットファイルに1枚ずつ綴じていくと、最初に綴じたレポート用紙は背表紙のすぐ上となる最終ページに保存され、そこから1枚ずつ重ねて綴じられていき、最後に綴じたレポート用紙はフラットファイルの表紙を開いてすぐの1ページ目に保存される。綴じられたレポート用紙をフラットファイルから1枚ずつ取り出すには、必然的に、最後に綴じられた1ページ目から取り出すことになり、最初に綴じられた最終ページのレポート用紙を取り出せるのは最後になる。ここで「フラットファイル」がスタック、「レポート用紙に書かれたメモ」が記憶した内容、「レポート用紙を綴じる/取り出す順番の決まり」がLIFO形式である。

言い換えると、メモリの内容を読み書きできる出入口が1箇所に制限されていることでメモリの内容を読み書きする順番が自動的に一意に定まるのがLIFO形式である。これは非常に重要な事実で、電卓にスタックマシンを採用すれば被演算子に演算命令を実行する順番も自動的に一意に定まることからハードウェアもソフトウェアも単純な処理だけで済むため極めて小規模で実装でき高速な動作が可能となるからだ。更に、副次的な効果として、ハードウェアの部品点数が少なくソフトウェアも小さくなるため、製品の販売価格と、製品にバグを作り込む確率を劇的に下げられることも挙がる。計算機工学から見ても優秀なアーキテクチャの1つである。

なお、スタックに内容を記憶させる操作をプッシュ(push)、スタックから記憶させた内容を取り出す操作をポップ(pop)という。先ほどのフラットファイルの例えに倣うと、被演算子を書き込んだレポート用紙を1枚ずつフラットファイルに綴じる操作がプッシュ、フラットファイルに綴じられたレポート用紙を1枚ずつ順番に取り出す操作がポップとなる。

動作

ではなぜRPNとスタックマシンは非常に相性が良く、RPN電卓では事実上コンビで使用されるのか。先ほどの「『5と7の和』と『8から3の差』の積」をHP製RPN電卓で演算させた際のスタックの動作で確認してみる。

標準的なHP製RPN電卓はX・Y・Z・Tの4段スタック[3]で、ディスプレイには常にスタックXの内容が表示される。LIFOの例に倣えば、レポート用紙を4枚綴じることができるフラットファイルの表紙が破れていて、1ページ目に綴じられたレポート用紙のメモが常に読める状態である。


最初は全て空[4]である。空でない場合は CLx をキーインし空にする。スタックXは便宜的に0を表示する。

T
Z
Y
X 0


5 をキーインし、スタックXに5をプッシュする。

T
Z
Y
X 5


ENTER をキーインしてスタックXの内容をスタックYにプッシュし、続けて 7 を押下してスタックXに7をプッシュする。

T
Z
Y 5
X 7


+ をキーインすると、スタックYとスタックXの内容をポップして、RPN電卓での算術演算子+の定義である「YとXの和」を演算、その結果である12をスタックXにプッシュすることで表示され、スタックYは空になる。

T
Z
Y
X 12


続けて 8 をキーインすると、スタックXの内容をスタックYにプッシュし、スタックXに8をプッシュする。

T
Z
Y 12
X 8


ENTER をキーインすると、スタックYの内容をスタックZに、スタックXの内容をスタックYに、それぞれプッシュする。続けて3 をキーインし、スタックXに3をプッシュする。

T
Z 12
Y 8
X 3


 をキーインすると、スタックYとスタックXの内容をポップして、RPN電卓での算術演算子-の定義である「YからXの差」を演算、その結果である5をスタックXにプッシュすることで表示される。スタックZの内容はスタックYにプッシュされ、スタックZは空になる。

T
Z
Y 12
X 5


最後に × をキーインすると、スタックYとスタックXの内容をポップして、RPN電卓での算術演算子*の定義である「YとXの積」を演算、最終的に求めたい結果である60をスタックXにプッシュすることで表示され、スタックYは空になる。

T
Z
Y
X 60


以上の9ステップで完了する。このように、RPNとスタックマシンの組合せることで

  • 頻出する二項演算では、常に2個の被演算子を先に入力・記憶させる必要があるが、この操作が「スタックにプッシュする」だけで済む
  • 被演算子をスタックにプッシュした時点で、被演算子の桁数を含む内容が決定済であるため、その後に算術演算子に沿った演算を即実行して良いと電卓が判断でき、わざわざ演算を実行させる契機である = を人間が入力する必要が無い
  • 演算過程(中間結果)もスタックにプッシュするため、そのためのメモリを別途実装する必要が無いのと同時に、ユーザも確認できる

ことになり、必要最低限のハードウェアとソフトウェアだけで極めて効率的な演算が可能となる。

その代わり、RPN電卓ユーザは常に頭の中でスタックの状態や中身を思い浮かべる必要がある。が、それはすぐに慣れてしまう。それよりも、キーインするステップ数の少なさと合理性(合理的思考であり合理的志向である)から抜け出せなくなる。RPN電卓ユーザは、ふつうの電卓(中置記法の電卓)が使えなくなる能力が自然と身に付いてしまうと謂われる所以である。この能力が利点か欠点か、その判断は読者諸兄姉に委ねるが、少なくとも管理人は利点と判断している。

これに対して、同じ式を中置記法の電卓で演算すると、5 + 7 = M+ C 8  3 = × MR = と13ステップ入力する必要がある。

まず「5と7の和」を演算し、その結果をメモリに保存。メモリ内容以外をクリアした後に「8から3の差」を演算、その結果に対して乗算の算術演算子を入力後、メモリに保存した「5と7の和」の演算結果を呼び出して = を入力し演算させることで、ようやく最終的な演算結果の60が得られる。

ここまで煩雑になる理由は「演算過程(中間結果)を記憶させるにはユーザの操作が必要である」ことと「演算させる契機として都度 = を入力する必要がある」ことに依る。特に後者は、最後に入力した被演算子(今回で言えば括弧内を演算するときの73)が1桁で終わるのか2桁以上あるのか、即ち、被演算子の内容が決定済か否かを電卓が判断できないため、演算するにはユーザからの指示が必須となる。よって、演算過程(中間結果)をメモリへ保存する操作と、演算を実行させる契機として都度 = を入力する操作が加わり、トータルでの入力ステップ数を増やす結果を招いている。

整理すると、電卓にRPNとスタックマシンを採用すると、

数式から、演算順位を明確化するための括弧を排除する

ために

算術演算子や関数が、必ず、被演算子の後ろに置かれる

ことから

「電卓に演算させる契機の入力」と「演算させたい算術演算子や関数の入力」が集約されて、1回の入力で済む

という特性が生じ

演算順位を考える必要が無くなり、キーインすべき回数も減るため、数式の演算を短時間で合理的に行える

ことになる。

よって、RPN電卓は

入力方法に後置記法を採用し、被演算子をスタックにそれぞれプッシュした後、それらに対して演算させたい算術演算子や関数を指定、スタックをポップして指定された演算を実行し、その結果をスタックにプッシュして表示する動作を繰り返すスタックマシン

と定義される。このとき、スタックを複数段用意(フラットファイルを厚くしてレポート用紙を多数綴じられるように)すると、入力した順に被演算子をスタックにプッシュし、最後の2つのスタックに対して算術演算子を指示することで連綿と演算できるのが、RPN電卓の最大の特長であり利点である。

尤も、電卓に限らず、あらゆるコンピュータが演算を実行する動作はRPNである。先述の通り、ハードウェアもソフトウェアも必要最低限で済むため演算に必要なリソースとコストが低いこともあるが、人間が入力した数式をコンピュータが解釈(評価)する際も、人間と同様に、数式を被演算子と算術演算子または関数に分解する必要があり、その最短の手順は「最初に演算対象である被演算子を特定して読み込んでから、その後に演算命令である算術演算子や関数を読み込み、最後に被演算子へ演算命令を実行する」という形にならざるを得ず、この挙動はRPNそのものだからだ。

つまり、中置記法の電卓は「人間には学校で学んだ数式通りの入力を求めつつ、内部でわざわざRPNに変換した後、当初の目的である演算をPRNで実行している」、RPN電卓は「RPNへの変換作業は人間にやらせて、電卓自身は当初の目的である演算のみに特化できている」ことになる。もっと言えば、中置記法の電卓には「中置記法→RPN変換機能」が必須なので回路とロジックが複雑で大規模になるが、RPN電卓には不要なので回路とロジックが単純で小規模に収まることになる。

なお、現行の電卓の入力方式に加算器方式がある。目の前に積まれた伝票にある数字をひたすら集計する際にキーインするステップ数が最も少なく済むため現在では主に企業の経理担当者が好んで使用しており新品も製造・販売され続けているが、もともとは電卓より遥かに歴史が長い、小売店等に置かれているキャッシュレジスタ(金銭登録機、いわゆる「レジ」)の入力方式である。基本的な操作は名前の通り「表示している数字に対して、数字を入力後、加算(または減算)を指示する」というもので、レジがまだ機械式計算機だったころの名残だが、これはRPNとまったく同じである。しかし、機械式から電子式(つまり電卓)へ置き換えるにあたり乗算機能と除算機能を付加した際、加算と減算は先述の基本操作が維持されたものの、乗算と除算は中置記法となった。

即ち、加算器方式は「加減算が2段スタックのRPN、乗除算が中置記法」のハイブリッドとなる。

その理由は、論理回路による乗算と除算の演算ではシフタを使用するためだと推測される。マイクロプロセッサを使用していない電卓の演算回路は純粋な論理回路のみで構成するワイヤードロジックで駆動しておりソフトウェアは存在しないが、電卓が発明され世に出た当時の機種では論理回路をディスクリートで組まねばならなかった。論理回路だけで乗算と除算を実装する場合、『被乗数を乗数だけ繰り返し加算した結果(積)を求める』と定義される乗算では、乗数をシフタで左シフト後に被乗数と論理積を取る必要が、『被除数から除数だけ繰り返し減算し、減算できた回数(商)と、減算できず余った数値(剰余)を求める』と定義される除算では、被除数と除数の大小比較を繰り返し減算できた(商が立った)際は被除数をシフタで左シフトし、再度除数と大小比較する必要が、それぞれある。即ち「これからキーインされる被演算子はシフタに渡せ」と物理的に回路を切り替えたり、「商が立った後は再度左シフトせよ」と繰り返す必要がある除算命令を出すための操作が中置記法という形で顕れたのだろう[5]

それが顕著なのが、1961年に世界で初めて発売された電卓であるANITA Mk-8である。ANITA Mk-8は論理回路を半導体ではなく真空管群で構成しており、スイッチング素子には計数放電管を、数字の表示にはニキシー管を、それぞれ使用しているが、操作マニュアルを読むと非常に興味深い。

  • 加算は「『加算モード設定キー』を押下後、フルキーで最上位桁から次々キーイン」
  • 減算は「いったん『加算モード設定キー』を押下して被減数をフルキーからキーイン後、『減算モード設定キー』を押下して減数をフルキーで最上位桁から次々キーイン」

と、スタックが2段のRPNと同じ動きである。『加算モード設定キーの押下』がスタックに被演算子をプッシュする準備なのだろう。「次々キーイン」できるのは置数のためのフルキーがモーメンタリスイッチだからだ。しかし、

  • 乗算は「『乗算モード設定キー』を押下して被乗数をフルキーからキーイン後、乗数を『乗数入力専用フルキー』からキーイン」
  • 除算は「いったん『加算モード設定キー』を押下して被除数をフルキーからキーイン後、『除算モード設定キー』を押下して除数をフルキーからキーインし、『乗数入力専用フルキー』の 0 を押下」

と、現代では凡そ見掛けない方法となる。ただ、「どうやってシフタに渡さねばならない被演算子を区別し、確実にシフタへ渡すか」に苦労している様子は見て取れる。この場合、「『乗算入力専用フルキー』からキーインした被演算子」は直接シフタに渡しているのだろう。

いずれにしろ、「中途半端なRPN」とも「中途半端な中置記法」とも言える加算器方式を、本サイトでは「広義のRPN」として扱う。

2つの理由

先述のANITA Mk-8から3年後の1964年には計数放電管をディスクリートのトランジスタに置き換えた電卓が発売されたが、依然として演算回路が純粋な論理回路のみで構成されていることに変わりはなかった。また、この時点から1970年代前半まではまだ半導体が未成熟で高価な部品だったこともあり、出荷後に電卓を故障させないためにも、延いては最終的な製品価格を抑えるためにも、使用する半導体の数は少なければ少ないほど良しとされた。電卓の回路とロジックを単純化・極小化し、使用する半導体の数を減らすには、加算器方式(広義のRPN)を選択するしかなかったのだ。これこそが、広義のRPNである加算器方式の電卓が世に出た理由である。

そのため、かつて日本で開発・製造・販売されていた電卓の殆どが加算器方式(とその亜流)であった。にもかかわらず、現在のように中置記法が主流となったのは、かの有名なカシオミニの初代(1972年8月発売)と2代目(1973年2月発売)が爆発的に売れた後である。

それまで電卓の購入層は経理担当者や科学者や技術者に限られており、RPNへの変換作業を人間にやらせる操作方法でも問題になりにくかった。今では俄かに信じられないが、1972年にカシオが初めて発売した科学・数学向け机上設置型関数電卓fx-1ですら加算器方式だったぐらいだ。しかし、『電卓のパーソナル化』を目指して開発したカシオミニでは「すべてのユーザが加算器方式を受け容れるとは限らない。『パーソナル化』を目指すなら、学校で習った通りに入力できる中置記法へ移行したほうが良い」と3代目(1973年5月発売)から中置記法への移行を決断したのは当然の流れだろう。

この3代目でカシオミニシリーズの累計販売台数は100万台を越え、1975年5月発売の最終モデルである8代目までで1,000万台以上を売り切った。1975年の国勢調査に依ると、当時の日本は約3,000万世帯だったので、僅か3年で国内世帯の⅓に中置記法の電卓が浸透するという凄まじい数字である。この大成功でカシオは『電卓のパーソナル化』を見事に達成し、グローバルな視点からも電卓メーカとしての地位を確かなものとしたが、この出来事は同時に、競合他社をも一斉に中置記法へ移行させ、RPN電卓に電卓市場からの退場を宣告したことにもなった。カシオミニをはじめとする中置記法の電卓が電卓市場を席捲したことで、加算器方式の電卓が売り場から追い遣られたからだ。3代目の製品開発期間を考慮すると、カシオは1972年後半に中置記法への移行を決断したことになるが、電卓が誕生したのは1964年なので、広義のRPNでもある加算器方式が主流派だったのは、僅か8年間だったことになる。

が、奇しくも同じ1972年にHP-35が発売されている。HPはHP-35の開発期間が2年間、即ち1969〜70年に開発を開始したことを公表しており、このときはまだ広義のRPNである加算器方式が主流派だったため何ら不思議ではないが、もしこのときもカシオが加算器方式を採用し続けていたら、現在でもRPNが世界の電卓の標準的な入力方式として生き長らえていたのかもしれないし、もしHP-35の開発開始が2〜3年遅れていれば、本Webサイトは存在しなかっただろう。HP-35はマイクロプロセッサとソフトウェアの組合せで構成するマイクロプログラム方式のため、ROMとRAMの容量さえ許せば中置記法を採用することも可能だからだ。

歴史に「たら・れば」は禁物とはいえ、RPN電卓とは、時宜の交錯が醸した妙味であると痛感せざるを得ない。

もし前置記法の電卓が存在したら…?

最後に、前置記法の電卓を考察する。

管理人の視野が狭いだけなのかもしれないが、先述した通り、管理人は「前置記法の電卓が実際に販売された例」を見聞きしたことがない。ではなぜ電卓に前置記法は採用されないのだろうか?

先ほどと同じ「『5と7の和』と『8から3の差』の積」を、前置記法をスタックマシンに適用した電卓で演算するシミュレーションをしてみる。

キーインするのは × + 5 ENTER 7  8 ENTER 3 の9ステップとなるが、これをそのままキーインしても演算が実行されないことは中置記法の動作で説明したのと同じだ。最後の3が決定済か否かを電卓が判断できないからだ。そこで、「演算させる契機として ENTER を入力する」ルールを設定すると下記になるだろう。


× + 5 ENTER 7  までキーインした時点で『5と7の和』を演算して良いことが確定するため、スタックB・C・Dをポップし「CとBに対するD」即ち『5と7の和』を演算する。

E *
D +
C 5
B 7
A -


『5と7の和』の演算結果である12が、この演算を実行する契機となった  がプッシュされたスタックの1つ上段のスタック(この例ではスタックB)にプッシュされる[6]

E
D
C *
B 12
A -


続けて 8 ENTER 3 と最後までキーインしても『8から3の差』は演算されない。最下段のスタックの内容(この例ではスタックAの3)が1桁で決定済で演算して良いことを電卓が検知できないからだ。よって、先ほど追加したルールに従い、演算させる契機として ENTER をキーイン、スタックA・B・Cをポップし「BとAに対するC」即ち『8から3の差』を演算する。

E *
D 12
C -
B 8
A 3


『8から3の差』の演算結果である5がスタックAにプッシュされるものの、ユーザが欲する『12と5の積』は演算されず停止する。この演算を実行して良いかを電卓が判断できないからだ。よって、先ほどと同様、演算させる契機として ENTER を再度キーイン、スタックA・B・Cをポップし「BとAに対するC」即ち『12と5の積』を演算する。

E
D
C *
B 12
A 5


『12と5の積』の演算結果である60がスタックAにプッシュされ、すべての演算が終了する。ENTER を2回追加でキーインしたため、トータルで11ステップとなった。

E
D
C
B
A 60


…はっきり言って非常に使い難い。

その理由は、前置記法が被演算子の前に算術演算子や関数を記述する記法ゆえ、被演算子だけではなく算術演算子や関数もスタックに積む必要があり、算術演算子や関数が必ず被演算子より奥のスタックに押し込まれることに尽きる。これにより、同じ規模の演算を実行するにも中置記法やRPNの電卓より多くのスタック(ハードウェアとしてのメモリとそれを管理するソフトウェア)を実装する必要があり、中置記法の電卓で = を入力するのと同様に演算契機をユーザが別途入力しなければならなくなる。

また、上記の考察では最下段のスタックのみ表示する電卓を想定したが、こうしてスタックの中身と演算過程を比較してみると、前置記法では最低3段のスタックを表示させたほうが良いことが判る。なぜなら、電卓で頻発する二項演算を実行する際は常に「算術演算子または関数が1段」「被演算子が2段」の3段のスタックが同時にポップされるため、RPNとは較べものにならないほどスタックの出入りが激しいからだ。

更に言えば、記憶すべきスタックの中身や状態に被演算子=数字だけでなく算術演算子または関数=記号も加わることで、訓練されたユーザでも、積まれたスタックがどういう状態なのか途中で把握できなくなると思われる。それを防ぐには、RPNや中置記法の電卓より大きな(複数行が表示できる)ディスプレイを実装したほうが親切だろう。

以上の考察から、電卓に前置記法を採用すると、ユーザが操作中に記憶すべきスタックの内容が増えるにもかかわらず、キーインするステップ数は中置記法と大差なく、実装しようとすればハードウェアもソフトウェアもどの記法より大規模となることが判る。これでは電卓の入力方式として[7]の前置記法は不適と言わざるを得ない。

尤も、この考察は、冒頭で宣言したように「前置記法をスタックマシンに適用した電卓」に限られることに注意されたい。「スタックマシンではない電卓」ではもっとスマートな動作になる可能性が否定できないものの、管理人の貧弱な脳味噌では、前置記法の数式を入力した(読み込んだ)だけでは、その式を演算して良いか否かを判断できず、よってユーザからの演算実行指示が必須であることに変わりが無いため、「だったらわざわざ判り難い前置記法なんぞ使わず、中置記法で良いんじゃね?」という結論になると考えている。

脚注

  1. 私立学校は学習指導要領からの逸脱が容易であるため、私立学校で学習する場合、学年次が学習指導要領と同じとは限らないうえ、前置記法や後置記法を学ばない可能性を否定できない。また、管理人が調べる限り、「後期中等教育を包含する5年制(商船に関する学科は5年6か月)の高等教育機関」である高等専門学校(高専)でも『論理学』は開講していることと、その成り立ちから理工系が大半を占めることから、高専生が前置記法や後置記法を学ぶ可能性は高いと判断し除外した。当然「高等教育機関」である大学では『論理学』はそこここで開講しているため除外した。日本の大学では理工系学部生のみならず、論理学の発祥が哲学であるため文科系学部生でも学ぶ可能性は充分ある。
  2. Wikipediaの語順によると、地球上の1,377言語ではSOV型が最多の565言語、次いでSVO型が488言語だそうだ。しかし、地球上での実際の話者数や、SOV型であるドイツ語では目的語を文頭に置いた場合は動詞が主語の次に置かれる動詞第二位語順をとる場合があること等を考慮すると、実態としてはSVO型のほうが優勢だと思われる。地球上で圧倒的に話者が多い中国語・英語・スペイン語がいずれもSVO型であることも大きい。尤も、今後増えるであろうインド系言語はSOV型だそうなので、しばらくすると状況は変わるのかもしれない。
  3. HPが最初に発売したRPN関数電卓であるHP 9100A/Bは3段スタックだった
  4. 1976年7月1日に発売されたHP-25C以降のHP製RPN関数電卓は、バッテリが切れない限り、電源を切ってもスタックの内容が消去されないため、次に電源を入れたときに再利用できる。裏を返せば、まったく別の演算をさせる際は明示的にスタックの内容を消去する必要がある。
  5. ここまでの説明で判る通り、コンピュータにとって算術乗算と算術除算はかなり複雑な処理で、論理回路が大規模になる。世界初のマイクロプロセッサであるIntel 4004はもちろん、HP-35からHP-65まで使用されたClassicアーキテクチャ、現在でも使用されているZ80には算術加算命令と算術減算命令しか実装されなかったぐらいだ。よって、これら初期のマイクロプロセッサで乗算と除算を実行するには、算術加算命令と算術減算命令を駆使してソフトウェアで実現する必要がある。
    裏を返せば、これら初期のマイクロプロセッサより、論理回路だけで演算回路を構成しているにもかかわらず乗算と除算が演算できる電卓のほうが高級なハードウェアだったといえるうえ、すべてのHP製RPN電卓はマイクロプロセッサとソフトウェアの組合せで設計されていることになる。
  6. 「演算結果は常に最下段のスタックにプッシュする」仕様に仮定すると、この演算例では  が奥のスタック(スタックB)に積まれるので、次の演算を考慮すると、ここでスタックの入れ替え ab も押下する必要がある。が、ここで述べたような「算術演算子や関数のキーインが契機で演算を実行した場合、その演算結果は、演算する契機となった算術演算子や関数がプッシュされたスタックの直上のスタックにプッシュする」仕様を設定すれば、ユーザに ab を押下させずに済む気はする。尤も、前置記法の電卓の実機なんぞ見たことも聞いたことも触ったこともなく、頭で考えただけなので、どちらの仕様設定が正しいかは不明だ。
  7. 「被演算子だけではなく算術演算子や関数もスタックに積む必要がある」ことが徒となり、電卓の入力方式としては欠点しか表出しない前置記法だが、この特性ゆえにプログラミング言語の文法として採用される場合がある。最も有名かつ歴史が長いのは、管理人も常用するエディタであるGNU Emacsのコアも構成する、1958年に登場したLISPにおけるS式の構文である。LISPのS式はソースコード(即ち算術演算子や関数)とデータ(即ち被演算子)を等価に扱い評価するため、被演算子だけではなく算術演算子や関数もスタックに積んで演算(評価)する前置記法は文法として最適である。したがって、LISPの弱点も前置記法と同じで、ソースコードの読解にコツが要り、ステップ数が無駄に多くなりスタック(メモリ)も大量に必要で演算量(演算回数)も増える。その結果、電卓や二昔もしくは三昔前のホストコンピュータなど貧弱なハードウェアではスラッシングが多発し動作が著しく遅くなる。そのため、多くのユーザが同時にログインして共用する形式のUNIXマシンでハードウェアが貧弱な場合、そのUNIXマシンのrootにより、LISP処理系やEmacsの使用が禁止されていることが殆どである。