RPL言語の歴史的意義を考察してみました。
ただの個人研究ですので、間違いがあってもご容赦下さい。
前回と重複しているところもあります。
目次
4 Level RPNの延長線上で代数式やCAS(数式処理システム)に対応するためには必要だったと思います。それ以外の高度な機能(グラフ描画など)にも必要でした。
つまり、「
RPNが好きな人のための高機能なグラフ電卓
」を作るには必要でした。
しかし、それだけだったと思います。RPNに関心のない人にはどうでもいいものでした。
そもそもRPL言語の前身の
4 Level RPN
とは何のために開発されたのでしょうか。
話は最初の 4 Level RPN 電卓が発売された1972年よりも前の時代から始まります。
世界最初の完全に電子式の計算機(つまり電卓)は1961年に登場した ANITA Mark VII / ANITA Mark VIII でした。これらの電卓は真空管を使用していました。
1964年にSHARP Compet CS-10Aが発売され電卓はオールトランジスタ・ダイオード式になりました。
SHARP Compet CS-10A
http://www.vintagecalculators.com/html/sharp_compet_cs10a.html
CS-10Aは コンプトメーター ( Comptometer )式のキーボードでしたので、操作方法は現在の電卓とかなり異なります。桁毎に1~9のボタンがあるので、同時押しで複数桁の数字を一回の操作で入力できるようです。このように操作方法は古いのですが、見た感じ少なくとも四則演算ができるようです。
翌年の1965年に発売された SHARP Compet 20 (CS-20A) から テンキー に変わっています。
1968年に発売された Sharp Compet 22 (CS-22A) を見て見ましょう。
SHARP Compet 22 (CS-22A)
http://www.vintagecalculators.com/html/sharp_compet_22.html
テンキーとメモリーキー(M+, M-, MR)を装備していますが、演算子キーが現代のものとは変わった感じになっています。
まず「+」キーと「−」キーがありません。×と÷はあるのですが。
その代わり、「÷」キーの上には
赤い「=」キー
があります。
白い「=」キー
があるにも関わらずです。
実はこの電卓は
加算器方式電卓
というものです。当時の主流でした。
白い「=」キーが「+=」を意味しており、
赤い「=」キー
が「−=」を意味しています。ただし、×あるいは÷の入力がされたときにどちらかの「=」キーを押すと、現在の電卓のように=そのままの意味になります。
このような単純な四則演算しかできない電卓には欠点があります。現在のライン表示入力(数式通り入力)ができる関数電卓と違って括弧が使えないので、複雑な計算をするときはメモが必要でした(現在の実務電卓でも一緒です)。
例えば、
(123.78+75.98) × (9560.45-7995.1) ÷ (323.11-310.25)
みたいな式を計算するとき、
メモを取らないと計算できません
。
SHARP Compet 32 (CS-32A) のようにメモリーが2つあれば、上の式はメモなしでも何とか計算できますが、そうでない限りはメモが必要です。
しかし、上の式にもう一つ( )で囲まれた数式が増えたら Compet 32 でもメモなしで計算できません。
それにメモリー機能はどのような値をメモリーに入れたのかを人間が覚えておかないといけませんので、メモリー数が増えると混乱の元になります。
以上のことから、この時代にRPN電卓が登場したのは画期的だったと思います。
RPNなら前述の式をメモを取らずに計算できます。メモリー機能すら不要です。
RPN電卓の場合、以下の操作をすれば前述の式を計算できます。スタックは3段あれば計算できます。
123.78[ENTER]75.98[+]9560.45[ENTER]7995.1[-][×]323.11[ENTER]310.25[-][÷]
結果は24315.2656299です(有効桁数12桁の場合)。
しかし、このような洗練されたRPNが誕生する前に複雑な経緯がありました。
世界最初のRPN的電卓 は1963年に発売された Friden EC-130 と言われています。
Friden EC-130
http://www.oldcalculatormuseum.com/friden130.html
上のページによると EC-130 はすでに 4-level RPN だったそうです。ただし、別のページ( http://www.hpmuseum.org/rpnvers.htm#prerpn )によると、Friden社はこの電卓の技術をRPNと言ったことはなく"stacking principle"と呼んでいたそうです。事実、[ENTER]キーの動きがヒューレット・パッカード社(以下HP社)のものとは完全に異なっており、Friden社が逆ポーランド記法(RPN)をちゃんと意識していたのか疑問です。スタックの原理が似ていただけかもしれません。
Friden社は諸事情で"stacking principle"の特許を取れなかったらしく、その特許はMathatronics社のものとなります。しかし、Mathatronics社の電卓は内部構造だけスタック的で利用者からその構造を隠していました。その後、Mathatronics社はBarry Wright社に買収されました。そのとき、HP社が"stacking principle"の特許を買い取ったそうです。ただし、HP社は独自でRPNを考案していた可能性があり、安全のために類似特許を買い取ったにすぎないかもしれません。そもそも電卓においてRPNという言葉を使い始めたのはHP社と思われます。
1968年にHP社は自社初のRPN電卓 HP 9100A を発売します。 世界最初の関数電卓 でした。関数電卓ですので、四則演算以外にも対数と三角関数の計算までできます。同時代の SHARP Compet 22 とは比較にならない高機能でした。しかもRPNなので複雑な式がメモなしで計算できます。
下記の参考資料によると、HP 9100シリーズは 3 Level RPN を使っていたとのことです。
参考: http://www.hpmuseum.org/rpnvers.htm#3level
HP 9100シリーズのメモリは非常に少なくて、ROMは4KB(64bit×512個)、RAMは1856bit(29bit×64個)=232byteとわずかでした。
参考: HP 9100 http://www.hpmuseum.org/tech9100.htm
当然のことながらこの悲惨なメモリ容量で現在の数式通りの入力が可能な関数電卓を作るのは不可能でした。そのために3 Level RPNが必要だったのです。
しかし、3 Level RPNでは式が複雑すぎるときにスタックが不足することがありました。
1972年にHP社初の 4 Level RPN電卓 が商品化されました。世界初のポケットに入る関数電卓 HP-35 です。
参考: http://www.hpmuseum.org/rpnvers.htm#4level
4 Level RPNだと理論上はどのような数式でも計算できるそうです(スタック溢れしないように工夫するのが前提)。
4 Level RPNは「
数式通り入力できる関数電卓
」が登場するまでは明らかに他の方式よりも優位にあったと思われます。
「 数式通り入力(ライン表示入力)できる関数電卓 」の中で最も古いものが何だったのかは調べてもよく分からなかったのですが、1980年にSHARPが PC-1210/1211 という 世界初のポケットコンピュータ を発売していますので、1980年代から「数式通り入力できる」ようになった電卓が登場し始めた思われます。ポケットコンピュータは数式に変数を入れることもできました。
ポケットコンピュータはプログラミング関数電卓の一種です。
当時の関数電卓と異なるのは、高級言語のBASICが使えたり、QWERTYキーボードが備わっていたくらいで本質的には関数電卓の一種でした。
その結果、4 Level RPNの優位点は減りました。複雑な式をメモなしで計算できるというRPNの優位点はなくなったのです。
それに「数式通り入力できる」電卓の方が直感的で使いやすいに決まっています。
「数式通り入力できる」電卓の場合、数式を入力・編集しながら数式を考えることができます。
一方、4 Level RPNだと計算前に数式を完全に決めておかないといけません。この点でも不利でした。
さらに「数式通り入力できる」電卓の場合、一度使った数式が履歴に残るので、その数式の一部の値を変えて再計算するのも容易でした。
4 Level RPNだとプログラミングをしないとそんなことはできません。しかも4 Level RPN電卓のプログラミング言語はポケットコンピュータで使われたBASIC言語のような高級なものではなくて キーストローク言語 という簡易プログラミング言語です。
この頃から「 RPNは括弧不要で入力効率が良い 」という利点が強調されるようになった可能性があります。言い換えるとそれくらいしか利点がなくなってしまったのですから。
1985年に
世界最初のグラフ電卓
CASIO fx-7000G
が登場し、4 Level RPN電卓は需要が依然としてあるものの時代遅れの感がありました。HP 9100Aが登場してから17年も経過していたのですから。
しかし、HP社はRPNを見捨てませんでした。
HP社は1984年にRPL言語を開発したと言われています。
ただし、実用化したのは1986年以降なのでプロトタイプ程度のものだった可能性はあります。
"RPLMan from Goodies Disk 4"(
http://www.hpcalc.org/details/1743
)というSystem RPL言語(後述)を説明した資料によると、OSをアセンブリ言語で記述するのがあまりにも大変なので、RPL言語が作られたとのことです。
ただし、RPL言語の開発の理由はOS実装の省力化だけではなかったと思われます。
RPLは
Reverse Polish Lisp
の略ですからRPN(
Reverse Polish Notation
)を意識したものに間違いありません。OS開発の省力化とともに 4 Level RPN の進化を目的としたもので間違いないと思われます(ただし、RPL は
Lisp言語
とは似ても似つかない文法であり、
Forth言語
の派生言語である)。
RPL言語には2種類あります。User RPLとSystem RPLです。
User RPLは先日説明したRPL言語のことです。電卓の使用者がプログラミングに使うものです。User RPLはインタープリタ言語かつ引数のエラー確認をするので実行速度は低速です。
一方、System RPL言語はコンパイラ言語(Saturn CPUの機械語に変換される)かつ引数のエラー確認をほとんどしないので高速に実行できますが、コマンドに正しい引数を渡すのはプログラマの責任になっています。不正な引数を渡してしまったときはシステムがクラッシュします。そのため、消費者向けではなくてOSやシステムの記述向けです。
最初にRPLを搭載した電卓は HP-18C (1986年発売)ですが、OSがSystem RPLで記述されているだけでプログラミング機能はありませんでした。同様にプログラミング機能がないのにOSだけSystem RPLで記述されている機種として、 HP-17B (1988年発売), HP-19B (1988年発売), HP-27S (1988年発売)があります。他にもあるようです。
RPL(User RPL)プログラミングが可能な最初の電卓は HP-28C (1987年発売)というグラフ電卓でした。カシオから世界最初のグラフ電卓 fx-7000G が出てから2年遅れでした。
このHP-28Cは後に HP 48シリーズ 、 HP 49シリーズ 、 HP 50g へと発展していきました。
RPL言語は確かに強力でした。当時のポケットコンピュータやHP社以外の電卓に搭載されたBASIC言語は変数名に制約があったり、構造化ができないものが多かったのですが、RPL言語にはそのような制約はなく強力な文法を持っています。
しかし、RPL言語という独自の言語を作ってまでRPNにこだわる必要があったのかどうかは疑問でした。RPNは
数値計算時に括弧入力が不要
以外の利点がそれほどありません。しかも計算履歴が残せないという欠点もありました(中置記法の数式をそのまま入力できる関数電卓だとどのような式を計算したのか履歴が残る)。
それらの欠点はRPL言語を搭載したグラフ電卓でも同様でした。
さらにRPNは代数式を扱うのが非常に苦手です。
例えば、中置記法の "X^2+3X+5" という式をRPNで入力するとします。
この式はRPNだと "X 2 ^ 3 X * + 5 +" となりますので、[ALPHA]キーのあるRPL搭載電卓(HP 48シリーズ以降)のRPNモードで入力すると、
[ALPHA][X][ENTER][2][Y^X][3][ENTER][ALPHA][X][*][+][5][+]
というボタン操作になります( [Y^X] ボタンは他社の非RPN電卓の [^] と同じ意味です)。
他社の数式通り入力できる電卓([ALPHA]キーがあるとする)の場合、中置記法の式"X^2+3X+5"をそのまま入力するので、
[ALPHA][X][^][2][+][3][ALPHA][X][+][5]
とRPNよりも簡単に入力できます。
HP社もこのことは自覚しているので、 RPNモードでも'〜'で囲った部分は中置記法で入力 できるようになっています。さらに EQW (Equation Writer) という教科書表示数式作成機能も中置記法で式を記述します。結局、代数式を扱うという関数電卓として重要なことがRPNだけではできないのです。 中置記法が必要 なのです。
RPNモードのとき、数学関数を呼ぶときに引数をスタックに入れてから関数を呼び出す必要があります。これはスタックに入れられた計算結果を引数に使うときには有利に働くこともありましたが、一行で関数と引数を記述できる中置記法の電卓よりも入力で不利なことが多かったと思います。
実際、HP 50gのHELP機能でFACTOR関数のHELPを表示してECHO機能で電卓の画面にサンプルをペーストすると、'FACTOR(X^2-2)'と表示されます。
RPL言語は'〜'で囲った式を中置記法として認識します。つまり、RPNモードなのにHELPのサンプルが中置記法でペーストされるのです。
RPNモードならば、先に'X^2-2'をスタックに入れて、CHOOSEボックス(上下に並んだ項目を選択)やソフトメニュー(F1~F6キーで選択)からFACTORコマンドを選択するべきです。しかし、そのような動作をサンプルとしてペーストするのは困難です。なぜなら、FACTORコマンドを選択すると、FACTORコマンドは画面に残らずに即実行されます。そのため、RPNとして動作するサンプルがコマンドを画面に残すのは難しいのです(CHOOSEボックスでFACTORの文字を反転させたところで止めたり、入力バッファにFACTORコマンドを入れて[ENTER]を押す前の状態で止めるという方法がないわけでもないが、HELPの動作として不自然である)。
結局、完全なRPNは実現できなかったのです。中置記法を使わないと何もできないと言っても過言ではありません。ここまでしてRPNにこだわる必要はあったのでしょうか。RPNに関心のない消費者からするとRPNと中置記法が混ぜこぜになっていて本当に難しいだけです。
1999年に HP 49G が発売されて、RPL言語搭載電卓なのに初期設定の入力方式が中置記法( ALGモード )になるという珍事が起きました。RPL言語搭載電卓はRPN入力のために作った言語なのに中置記法で起動するのです。RPNに切り替えることは可能でしたが、HP社が「グラフ電卓のRPN入力は消費者に受け入れられない」とマーケティング的に判断したのは間違いないようです。
HP社の公式マニュアル " HP 48gII and 50g Graphing Calculator Advanced User's Reference Manual (V2) " の pdfファイルの26ページ(印刷上は1-2ページ)に "Calculations in a Program" という項目があります。
そこでは、√(X^2+Y^2)を計算するプログラムを3つ提示しています(スタックにあらかじめXとYの数値が入っているのが前提)。
« SQ SWAP SQ + √ »
« → x y « x SQ y SQ + √ » »
« → x y '√(x^2+y^2)' »
上のプログラムの「→ x y」はスタックからxとyを取り出すという意味です。
1つ目のRPLプログラムは
スタック技法とRPN
を使ったものです。
2つ目のRPLプログラムは
純粋なRPNで数式
を書いたものです(SQは2乗する関数)。
3つ目のRPLプログラムは
'〜'を使って式を中置記法
で記述しています。
前述のpdfにはこのように書かれています。
"Note that the underlying formula is most apparent in the third program. This third method is often the easiest to write, read, and debug."
訳:「注意するべきは、3番目のプログラムの中に入っている数式が最も明快なことです。この3番目の方法は多くの場合、最も書きやすく、最も読みやすく、最もデバッグしやすいのです。」
つまり、HP社自らRPNを否定しているようなものです。3番目のプログラム=中置記法なのですから。結局、RPN電卓で高度なことをできるRPL言語を作ってみたものの中置記法も必要だったのが実情なのです。
"HP 48gII and 50g Graphing Calculator Advanced User's Reference Manual (V2)"は2009年に発行されたので、すでにRPL言語搭載グラフ電卓は衰退していました。HP社もRPL言語の欠点を認めたのでしょう。
RPL言語を搭載した最後の電卓 HP 50g は2015年に製造終了が発表されています。
結局、1987年発売のHP-28Cから始まった28年以上に渡るRPL言語搭載電卓の歴史は終わりました。消費者はRPL言語搭載電卓を選ばなかったのです。
私見ですが、過去のHP社はRPNを過信していたのではないでしょうか。RPN電卓は、電卓のメモリが少ない時代に少ないメモリで複雑な数式を計算できる電卓として 仕方なく 考案されたものです。括弧を使えるようにすると、括弧の情報と優先順位の低い計算数値や計算命令などを一時的に記憶する必要があるので、どうしてもメモリを多く消費するからです。「RPNは括弧を入力しなくてもいいので計算効率が良い」とかはHP社の後付けの利点だと思われます。しかし、HP社はRPNを他社との差別化ができる強力な武器と考えてしまったのでしょう。
しかし、RPNの延長線上で開発されたRPL言語はRPNと中置記法が混ざった中途半端な言語でした。スタック指向かつ後置記法なので可読性も優れているとは言えません。RPL言語の元になった Forth言語 も普及はしませんでした。RPL言語以外のForth派生言語も普及しませんでした。やはり後置記法(RPN)言語は分かり難いのでしょう。
他社の「数式通り入力」方式のグラフ電卓の多くが採用したBASIC言語はRPL言語よりも文法は貧弱でしたが、RPL言語よりも分かりやすく即興でプログラムを組むにはむしろ使いやすい言語でした。
RPL言語は特に存在価値がなくなったのでしょう。4 Level RPNをここまで拡張させて色々なことができるようにしたのは素晴らしい実験だと思います。しかし、やはり無理があったと思います。4 Level RPNは所詮数値計算のためのものですから。
最初に書いたように「RPNが好きな人のための高機能なグラフ電卓を作るために必要」だっただけの言語なのでしょう。
以上です。