電卓カフェ

読者です 読者をやめる 読者になる 読者になる

電卓カフェ

電卓の話題を書きます

RPL言語の歴史的意義

RPL RPN グラフ電卓 関数電卓 歴史

RPL言語の歴史的意義を考察してみました。
ただの個人研究ですので、間違いがあってもご容赦下さい。

前回と重複しているところもあります。

RPL言語についてはこの記事をご覧ください。 

calculator2017.hatenablog.jp

その他関連記事

RPN と 4 Level RPN 電卓
RPL言語搭載電卓の歴史とその終焉

目次

RPL言語は必要だったのか?

4 Level RPNの延長線上で代数式やCAS(数式処理システム)に対応するためには必要だったと思います。それ以外の高度な機能(グラフ描画など)にも必要でした。
つまり、「RPNが好きな人のための高機能なグラフ電卓」を作るには必要でした。
しかし、それだけだったと思います。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 )式のキーボードでしたので、操作方法は現在の電卓とかなり異なります。桁毎に0~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 でもメモなしで計算できません。
それにメモリー機能はどのような値をメモリーに入れたのかを人間が覚えておかないといけませんので、メモリー数が増えると混乱の元になります。

RPL言語の前身 4 Level RPN の始まり

以上のことから、この時代に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を見捨てませんでした。

RPL言語の登場

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 の略ですからRPNReverse 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言語の限界

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)'と表示されます。

f:id:nekosuki2017:20170226161447j:plain f:id:nekosuki2017:20170226161448j:plain

RPL言語は''で囲った式を中置記法として認識します。つまり、RPNモードなのにHELPのサンプルが中置記法でペーストされるのです。RPNモードならば、先に'X^2-2'をスタックに入れて、FACTORコマンドを呼ぶべきですが、RPNモードの性質上コマンドを入力すると即実行になってしまうので、サンプルとしてRPNは使えないのです。

結局、完全なRPNは実現できなかったのです。中置記法を使わないと何もできないと言っても過言ではありません。ここまでしてRPNにこだわる必要はあったのでしょうか。RPNに関心のない消費者からするとRPN中置記法が混ぜこぜになっていて本当に難しいだけです。

HP社すらRPL言語に懐疑的になった

1999年にHP 49Gが発売されて、RPL言語搭載電卓なのに初期設定の入力方式が中置記法ALGモード)になるという珍事が起きました。RPL言語搭載電卓はRPN入力のために作った言語なのに中置記法で起動するのです。PRNに切り替えることは可能でしたが、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言語とは何だったのか?

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言語よりも分かりやすく即興でプログラムを組むにはむしろ使いやすい言語でした。

さらにテキサス・インスツルメンツ社のTI-Nspireが採用したLua言語 はPascal言語風の構造化ができ、文法も強力でRPL言語よりも可読性が高く分かり易いのです。しかも実行前にLua仮想マシンによってコンパイルされるのでRPL言語(User RPL)よりも高速に動作します。

RPL言語は時代遅れになったのです。4 Level RPNをここまで拡張させて色々なことができるようにしたのは素晴らしい実験だと思います。しかし、やはり無理があったと思います。4 Level RPNは所詮数値計算のためのものですから。

最初に書いたように「RPNが好きな人のための高機能なグラフ電卓を作るには必要」だっただけの言語だったのでしょう。

 

以上です。
 

hp 50G F2229AA ABA

hp 50G F2229AA ABA