電卓カフェ

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

電卓カフェ

電卓の話題を書きます

最後のRPL言語搭載グラフ電卓 HP 50g(ファームウェア編)

HP 50g RPL RPN グラフ電卓 関数電卓

f:id:nekosuki2017:20170304170623j:plain

前回に続き2016年10月に入手したHP 50gについて書いてみたいと思います。
前回はハードウェアでしたが、今回はファームウェアについて書きます。

前回の記事 

calculator2017.hatenablog.jp

 

目次

圧倒的な機能の多さ

今までに3つ記事を書いたTI-84 Plus CEとは段違いの機能の多さを誇ります。
それは以下に示す説明書(全て英語版)の物量の違いからも明らかです。
ページ数はAcrobat Readerによって表示される全体のページ数ですので、pdf内に書かれているページ数ではありません。

  1. Quick Start Guide (pdf/paper 61 pages):付属の小冊子。概要の概要
  2. user's manual (pdf 184 pages):概要だが、これを読むとおおよそのことは分かってくる。
  3. user's guide (pdf 888 pages):詳細説明書
  4. advanced user's reference manual (pdf 693 pages):RPL言語の説明

合計1,821 pagesです。

TI-84 Plus CEの主要説明書4冊の合計が 273 pages("Quick Start"を16 pagesとしたとき)ということを考えるとその物量が知れるというものです。
以前書いたようにTI-84 Plus CEの説明書が手抜き気味なのでページ数が少ない面もありますが、それを差し引いても説明書のページ数は圧倒的にHP 50gが多いのです。
ちなみに"user's manual"(概要)だけは日本語版がありますが、酷い翻訳のものです。翻訳会社に丸投げしてHP社が校正していない感じのものです。
日本語版が分かり難いので、私は英語版で読みました。

私が読んだ説明書は"Quick Start Guide"全部, "user's manual"全部, "advanced user's reference manual"のChapter1(RPL言語の文法)です。
それ以外のところは必要なところだけ読んでいます。
ネイティブの英語話者でも全部通して読む人はほとんどいないでしょう。

比較対象のTI-84 Plus CEはCAS(数式処理システム)がありません。CASのない電卓の変数はただの数値の入れ物です。

一方、HP 50gはCASがあるので、変数は変数として扱えます。つまり値がないものとして扱えます(もちろん値を入れることもできる)。
例えば、HP 50gの場合、Xを未定義の状態で'LOG(X)+X^4'を微分すると、
'(1/X)/(LN(10))+4・X^3' と計算してくれます(下図)。

f:id:nekosuki2017:20170304171348j:plain  f:id:nekosuki2017:20170304171349j:plain

一方、CASなしのTI-84 Plus CEだと、このような代数的な微分はできません。Xの数値を具体的に決めないと微分できません(日本で売っている教科書表示関数電卓と一緒)。

HP 50gがマクローリン展開、フーリエ変換、ラプラス変換などができるのもCASのおかげです。HP 50gに限らず、変数を変数として扱えるのがCASの魅力でしょう。


煩雑なシステムフラグ設定

電卓の設定をするシステムフラグは83個もあります。

システムフラグの設定画面を出してみましょう。
MODEボタンを押すと、電卓モード画面が表示されます。

f:id:nekosuki2017:20170304171630j:plain 

電卓モード画面下のソフトメニューの[FLAGS]を押すと、システムフラグの設定画面が出てきます。

f:id:nekosuki2017:20170304171747j:plain

設定できるシステムフラグは83個もあります。
それなのに一画面で表示できるのは9個にすぎないので自分が全体的に何を設定しているのか把握するのは困難です。少なくとも分類分けはできなかったのでしょうか。電卓モード画面や後述のCAS設定画面と重複している設定もあります。

余談ですが、RPL言語からシステムフラグを参照する時はフラグ番号に負号を付ける必要があります。

CHOOSEボックスとソフトメニュー

HP 50gのメニュー選択の方法は、CHOOSEボックスとソフトメニューがあります。
システムフラグの117番でどちらを主に使うのか設定できます。
注意するべきはCHOOSEボックスを選んでもソフトメニューを使うときもあれば、その逆にソフトメニューを選んでもCHOOSEボックスを使うこともあります。
初期設定ではCHOOSEボックスを主に使う設定になっています。

下図はCHOOSEボックスの画面です。

f:id:nekosuki2017:20170304171900j:plain

選択肢の末尾が..になっている選択肢を押すと、メニュー階層が下に移動します。
ただし、最後の選択肢の末尾が..になっている場合は上に移動します。

下図はソフトメニューです。上のCHOOSEボックスと同じ意味です。

f:id:nekosuki2017:20170304171933j:plain

選択肢の黒い箱の左上が膨らんでいるところを押すと、メニュー階層が下に移動します。
ただし、最後の選択肢の黒い箱の左上が膨らんでいる場合は上に移動します。

CHOOSEボックスとソフトメニューはお互いに利点と欠点があります。

・CHOOSEボックス

利点:長い名前の選択肢が表示できる。9個まで選択肢が表示できる。ユーザーに選択を強制できる。

欠点:CHOOSEボックスの下の画面が隠れてしまう。表示されている間は他の操作ができない(ユーザーに選択を強制させるときはそれが利点になる)。選択肢を選んでからOKを押すので手順が一つ増える。

・ソフトメニュー

利点:画面の下の方しか使わないので、他の表示を妨害しないし、通常操作も妨害されない。押すだけで実行できるので、手順が少ない。

欠点:選択肢の先頭5文字しか表示できない。先頭5文字が同一の選択肢が一緒に表示されると区別できない。さらに選択肢が6個までしか表示できない。NXTボタンで次の6個の選択肢を表示できるが、戻る時は左シフト+NXTボタンを押す必要がある。

 

自分は主にソフトメニューを使っています。画面がCHOOSEボックスで隠れるのは好きではないし、操作手順も少なくて済みます。しかし、先頭5文字では分かり難い選択肢があったり、先頭5文字が重複する選択肢が一緒に表示されるという欠点があります。

そのため、HP社はCHOOSEボックスを作ったのでしょう。
以下の資料を調べたところHP 49Gから"choose list menu"という言葉が登場します(HP 49G User's Guide, Chapter2 Page 2-7)。これがCHOOSEボックスの始まりだったと思われます。

・HP-28S取扱説明書 : http://support.hp.com/us-en/product/HP-28s-Scientific-Calculator/33550/model/20670/manuals
・HP 48G Series User's Guide : http://www.hpcalc.org/details/3937
・HP 49G User's Guide : http://www.hpcalc.org/details/3003

しかし、CHOOSEボックスにも欠点はあり、ソフトメニューの完全な代わりにはなりません。

HP社はソフトメニューを改良するべきでした。HP 49Gの画面解像度は131×64でしたが、hp 49g+から画面解像度は131×80になりました。縦解像度が16画素増えたのです。
これの一部をソフトメニューに使えば良かったのです。ソフトメニューを2行表示にするべきだったのです。その方がCHOOSEボックスよりも使いやすいことが多かったはずです。
ただし、ユーザーに選択を強制させたい時はCHOOSEボックスの方が便利です。

煩雑なメニュー呼出。どこに何があるのか分からない!

HP 50gのメニューの最大の問題点は全てのメニューを集めたメインメニューがないことです(TI-84 Plus CEにも言えていることだが、TI-84 Plus CEは機能が少ないので、それほど問題になっていない)。

メインメニューではないのですが、CAS関連のメニューだけを集めたメニューはあります。しかし、APPSボタンを押してCHOOSEボックスを表示して、上から11番目にある"CAS Menu"を選択する必要があります。あまり分かりやすいところにあるとは言えませんし、このような手間をかけるなら直接特定のメニューを表示する方が速いという人もいるでしょう。

基本的には各メニューがバラバラに存在しているのです。
各メニューはキーから呼び出さないといけないのですが、キーボードには短縮名でしかメニュー名や機能名が印刷されていないのです。そのため、キーボードを見ただけでは、どれがメニューなのか機能なのか設定なのかよく分かりません。

しかもキーを押すだけで表示されるメニューもあれば、左右シフトキーを使わないと表示されないものもあり、操作は煩雑になっています。

さらに左右シフトキーを押してから特定のボタンを押した場合と、左右シフトキーを押しながら特定のボタンを押した場合で表示されるメニューが異なることもあります。

例えば、右シフトを押してから7を押すとソルバー機能のCHOOSEメニューが出ます(CHOOSEボックスのシステムフラグを無効にしても)。一方、右シフトを押しながら7を押すとSOLVEソフトメニュー(前述のソルバー機能とは別のメニュー)が表示されます。これは酷いと思いました。

結局、どのキーを押したらどのような内容のメニューが出るのか覚えるしかないのです。

さらにメニュー階層も深くなっているものが多いのにソフトメニューやCHOOSEボックスのような表示項目数が多いとはいえないものでメニュー内の移動をしないといけません。

まるで巨大な迷路の中をウロウロしているような操作性です。
膨大な機能数にGUIが明らかに追いついていない感じです。

煩雑なCAS(数式処理システム)の設定

MODEボタンを押して電卓モード画面を出して、ソフトメニューの[ CAS ]を押すと、CAS設定画面が出ます。

f:id:nekosuki2017:20170304174357j:plain

CASの設定項目は短縮語なので分かり難く、以下のような意味になっています。

Indep var : 独立変数として使う変数名(デフォルトはX)
Modulo : 合同式の計算に使う法の値
Numeric : チェックすると、定数(π,eなど)を数値化する。関数もできるだけ数値化する。
Approx : チェックしない場合、答えをできるだけ代数式にする。チェックすると答えをできるだけ数値化する。
Complex : チェックするとComplexモードになり複素数の計算ができるようになるが、計算速度が低下する。
Verbose : チェックすると微積分をしているときに画面の上によく分からないコメントが表示される。
Step/Step : チェックすると代数式の計算を内部ステップ毎に計算・表示する。ENTER連打が必要になる。
Incr Pow : チェックすると代数式の次数の少ない項から順番に左から右へ表示される。
Rigorous : チェックを消すと、式から絶対値記号||を消去して計算する(通常はチェックして使う)
Simp Non-Rational : チェックすると、有理式ではない式を自動的に単純化する。

この中で最も頻繁に切替えるのはApproxでしょう。
そのため、Approx切替用のショートカット(右シフトを押しながらENTERを押す)が用意されています。しかし、そのショートカットはキーボードには印刷されていないので、覚えるしかありません。

"user's guide"(Page C-6)によると、できるだけComplexをチェックしないで使って欲しいとのことが書かれています。チェックすると計算速度が低下するからです(計算時間がかかるので、消費電力も増える)。

ここはグラフ電卓の限界を感じます(本機より高性能な HP Prime ですら複素数モードがデフォルトで有効になっていない)。

Complexをチェックしていなくても複素数の計算が必要になるとHP 50gがComplexモードを有効にするかどうか聞いてきます。それ自体は便利なのですが、Realモード(通常のモード)に戻るには、CASの設定画面を表示する必要があり面倒です。

CASの設定は全て正確に設定しないと、HP 50gが正確な結果を出さなかったり、変な動作をします。しかし、設定項目が全て短縮語です。そのため、全部覚えないといけません。

少し脱線しますが、CAS( Computer Algebra System )は一般的に「数式処理システム」と翻訳されますが、直訳すると「コンピュータ代数システム」となります。個人的にはこっちの方がCASの意味が分かりやすいような気がするのですが。

コマンド/CAS関数名に酷いものがある

例えば、テイラー展開関係のコマンド/関数が下記のように3つあります。

  • TAYLRコマンド(マクローリン展開。最大相対次数の指定ができる。相対次数とは結果の最大次数と最小次数の差)
  • TAYLOR0関数(マクローリン展開。最大相対次数は4固定)
  • SERIESコマンド(テイラー展開。最大相対次数とテイラー展開する変数名が指定できる)

数学が分からない人のために簡単に説明しておきます。テイラー展開とは四則演算で表現できない関数(三角関数、対数関数など)を無限級数化するときによく使います。無限級数(テイラー級数)はたいてい四則演算で計算できるものになります。
つまり、テイラー展開によって、三角関数や自然対数を四則演算で計算できる近似式に変換できるのです(無限級数を実際に無限に足すことはできないので近似になる)。

マクローリン展開はテイラー展開の特別な場合です(x=0まわりのテイラー展開)。マクローリン展開の方が計算が容易かつ結果が同じ場合が多いので、テイラー展開と言ってもマクローリン展開で済ませてしまうことが多いのです。

話を戻しますが、上のコマンド名/関数名を見て正確な意味が分かりますか?

TAYLRは"TAYLOR"をソフトメニューのために5文字に短縮したのでしょう。しかし、マクローリン展開であることは名前から推測できません。

TAYLOR0は関数名から「x=0まわりのテイラー展開=マクローリン展開」程度のことは想像できてもTAYLRと何が違うのかは関数名だけで推測するのは不可能です。

SERIESは直訳すると「級数」です(苦笑)。確かにテイラー展開はテイラー級数を求めるのが目的ですが、ただ単にSERIES(級数)はあまりにも酷いです。せめてTSERIESにできなかったのでしょうか。何か都合があったのかもしれませんが。

このようにコマンド/CAS関数名に酷いものがあります。HP-28C(1987年発売)から19年間拡張を続けた結果なのでしょう。

せめてHP 48G+(1998年)からHP 49G(1999年)へ移行する時に名前を整理できなかったのかなとは思いますが。

HELP機能がCAS関数にしか対応していない

HP 50gのHELP機能はCAS関数にしか対応していません。

上述のTAYLOR0はCAS関数なのでHELPで見れます。

一方、上述のTAYLRとSERIESは電卓コマンドなので、HELPで見れません。
これってHELPの意味がないのでは?(そもそもTAYLRとSERIESがCASに入っていないのが不思議だが、機能拡張の歴史によるものだろう)

CAS以外のコマンドや関数のHELPはフリーライブラリのHLP49をHP 50gにインストールするしかありません。問題なのはHLP49は500KB程度の空き容量を消費しますので、内蔵フラッシュメモリの空き容量の半分くらいを使ってしまいます。そのため、SDCARDにインストールすることもできるようになっています。

HLP49にはもう一つ問題があります。'HLP49'とコマンドを打てば呼び出せるのですが、それだと呼び出しが面倒なので、どこかのキーに割当てないといけません。しかし、HP 50gは空いているキーなんてないので、かなり強引なキー割り当てになります。HLP49の説明書には「左シフト+ALPHA+EVAL」という割当てが例として書かれています。忘れると使えなくなりそうなキー割り当てですが、HLP49のせいではありません。外部のライブラリを統一的に呼出す仕組みを作らなかったHP社の問題なのです。例えば、TOOLソフトメニューのHELP項目の右に空きがあるので、そこに外部のライブラリをCHOOSEボックスで選択・実行できるような仕組みがあっても良かったと思うのですが。

説明書にALGモードとRPNモードの説明が混在していて読み難い

説明書にALGモード(中置記法。普通の数式記法)の説明とRPNモード(逆ポーランド記法)の説明が混在していて読みにくくなっています。しかも必ずしも両モードを公平に扱っておらず、片方のモードにおける説明が中心になっていることもあります。コマンドや関数のリファレンスも両モードに対応した書き方になっていて見辛くなっています。

そもそもRPL言語搭載グラフ電卓にALGモード(中置記法モード)を付けたのが間違いだと思うのです。ただでさえ煩雑な操作をさらにややこしくしてしまったのです。

しかし、問題はそれだけではありません。操作モード(ALG / RPN)と関係なく分かり難い説明もあります。

例えば、"advanced user’s reference manual"の3-286ページの|(Where)コマンドの説明は酷いと思いました。

 Where Function: Substitutes values for names in an expression.
 | is used primarily in algebraic objects, where its syntax is:
 'symbold | (name1 = symb1, name2 = symb2 …)'

(訳)
 Where関数: 数式中のnameを値に置き換える。
 |(whereコマンド)は代数式オブジェクトの中で最優先で使われる。その文法は:
 'symbold | (name1 = symb1, name2 = symb2 …)'

この中で酷いのは文法の説明です。
symboldがexpression(数式)に相当するという説明がどこにもありません。
name1,name2は理解できますが、symb1,symb2が「数値」だと言う説明がどこにもありません。

このコマンドの意味は実は簡単です。例えば、

 'X+Y|(X=2,Y=5)' → 2+5

ということです。簡単なのにどうやったらここまで酷い説明ができるのか。

私は"advanced user's reference manual"の説明で理解できなかったので、前述のHLP49というフリーライブラリを使ってやっと理解できました。

2006年から修正されていない付属CD

2015年10月に買ったのにCDに入っているPC接続ソフトが Windows XP までしか対応していません。
Windows Vista 以降ではこのCDに入っている接続ソフトは使用できません。
ハードドライバがVista以降用に書き換えられていないからだと思われます。

実はWindows VistaとWindows 7に対応した新しい接続ソフト(PC Connectivity Kit / Conn4x)とそのためのハードドライバは以下からダウンロードできます。これらは2009年にリリースされたものです。

HP 50g, 49g+ and 48gII PC Connectivity Kit (Conn4x)
http://www.hpcalc.org/details/5890

HP USB Drivers
http://www.hpcalc.org/details/7168

ここで凄まじく疑問が生じます。

HP 50gは2006年秋に発売されました。一方、Windows Vistaは2007年1月発売です。
ということはHP 50gの付属CDは2006年から修正されていないということです。

付属CDの修正なんてたいして費用はかからないのに2006年秋発売から2015年の製造終了まで放置していたとは異常ではないでしょうか。

さらにCDの中にはPDF資料(最初の上で書いた説明書)も入っているのですが、2006年からCDの内容が変更されていないとするとネットからダウンロードした方が良いと思います。

使いにくい PC Connectivity Kit

PC接続ソフト"PC Connectivity Kit"(Conn4x)は機能によって接続方法を変える必要があります。

f:id:nekosuki2017:20170304181729p:plain

(1) HP 50gのファイルをPCから操作するとき

 1.付属のmini USBケーブルでPCとHp 50gを接続する。
 2.HP 50gでXSERVコマンドを実行しておく(HP 50gがXmodemサーバーになる)。
 3.PCで"PC Connectivity Kit"を起動し、FileメニューからConnectを選択。
 (繋がらない時はConnect usingをAutoからUSBに変えた方がいいかもしれない。自分の場合はAutoで問題なかった)

(2) HP 50gの画面をキャプチャするとき
 1.付属のmini USBケーブルでPCとHP 50gを接続する。
 2.PCで"PC Connectivity Kit"を起動し、キャプチャボタンを押す。
  するとPC側がキャプチャ待機状態になる。
  ちなみに(1)のファイル操作用の接続をしているときに
  キャプチャボタンを押すと(1)の接続は切れる。
 3.HP 50gのONボタンを押しながら、↑カーソルキーを押すと、キャプチャ画像がPCに転送される。

どうやら(1)ファイル操作の時はHP 50gがサーバーになって、(2)画面キャプチャのときはPCがサーバーになるようです。

そのため、ファイル操作と画面キャプチャを同時に使えません。
ここのところにも古さを感じます。

ちなみに以前紹介したテキサス・インスツルメンツ社の TI-CONNECT CE だと接続は自動だし、ファイル操作と画面キャプチャは同時にできます。
しかもMac版まであったりします。

ファームウェア総評

自分のHP 50gファームウェアの評価をまとめると以下の3点になります。

  1. 古いGUIが機能の多さに追いついていない。
  2. ALGモード不要。ただでさえ複雑な操作と説明書をさらにややこしくしただけだった。
  3. コマンド名と関数名が整理されていない。

操作方法はHP-28C(1987年発売)からそのまま拡張された感じです。
HP 50gは2006年発売ですから19年もの歳月が流れています。
HP-28Cが元になったGUIも賞味期限切れだったのでしょう。

GUIが大幅に改善できなかった理由に液晶画面の解像度が低すぎるというのもあると思います。HP-28Cの画面解像度は137×32画素でしたが、HP 50gになっても131×80画素しかありません。
19年もかかって約2.4倍しか画素が増えていないのです。

ただし、HP社の電卓部門は1990年代後半に売上が良いとはいえなかったようでHP 48シリーズの後継機種に十分な予算が出なかった可能性があります。事実、1999年に発売されたHP 49GはHP 48シリーズよりもチープな作りでした。従来のプラスチックボタンはゴムボタンになり、従来のソフトケースはスライドケースになってしまいました。

しかし、HP 48シリーズが売れなくなったからと言って、予算を減らしてチープなものを作っていたらますます売れなくなるという悪循環に陥ったのではないでしょうか。HP 49G のような貧弱なものではなく、もっと大幅に性能を上げたもの、あるいは新シリーズの電卓を立ち上げるべきでした。

その後、HP社のカーリー・フィオリーナCEOが2001年にHP社の電卓部門を一時閉鎖して大量の電卓開発者が解雇されました。これも後にGUIが改善できなかった一因かもしれません。

NECが技術的理由でSaturn CPUの製造ができなくなったとき、HP社がARM CPU上でSaturn 4bit CPUエミュレータを動かす方法を採用したのは、電卓開発者を大量解雇したので、新しい電卓シリーズを立ち上げる人材もいなかったのかもしれません。エミュレータがあれば今までのファームウェアの改造をするだけで済みますから。その代わり性能を大幅に上げることはできません。

結局、HP 50gまでSaturn CPUエミュレータが使われ、ハードウェアとファームウェアの大幅な改善はなく終わった感があります。

話は変わって、HP 49GからHP 50gまで続いているALGモード(中置記法モード)も失敗だったと思います。ただでさえ複雑だった説明書をさらに複雑にしてしまっただけではないでしょうか。

それにALGモードは画素数の多い画面が必要です。計算対象の数式とその結果を同時に表示するからです。しかし、HP 49G/49g+/50gはいずれも画素数が少ないので、ALGモードで使うとその画面解像度の低さをさらに強調してしまったのではないでしょうか。
RPNとRPL言語のためだけに作られたハードウェアにALGモードを搭載したため副作用が出てしまった気がします。

HP 49Gは初期設定がALGモードで起動するようになったので、RPNに関心のない消費者(多数派)にとってHP社のHP 49G以降のグラフ電卓はRPNではない普通のグラフ電卓になったわけです。
そうなるとHP 49Gの比較対象はその1年前に発売されたTI-89になってしまいます。
HP 49GはSaturn 4bit CPU 4MHzです。対してTI-89は初期型でもMC68000 32bit CPU(外部バス16bit) 10MHzです。
これでは速度性能が全然違います。速度性能的にはHP 49Gは逆立ちしてもTI-89に勝てないのです。

HP 49Gより前の時代、HP社のRPL言語搭載グラフ電卓はRPN+RPL言語という別の土俵にいたから4bit CPUでも他社と勝負できたわけです。それなのにALGモードを付けて他社と同じ土俵に立ってしまったのですから却って不利になっただけではないでしょうか。

HP 49g+(2003年発売)とHP 50g(2006年発売)はARM CPU 75MHz上でSaturn CPUエミュレータを動かしているので、HP 49Gよりも高速になりました。しかし、MC68000 CPU 16MHzを搭載した TI-89 Titanium(2004年発売)より高速だったのかどうかはよく分かりません。

ところで、ALGモードの弊害は他にもあります。
RPL言語はRPNモードに極端に依存したものです。そのため、ALGモードしか使わない人がRPL言語を見ても何故スタックや後置記法(RPN)が必要なのか理解できないでしょう。
RPNモードで操作をしていれば、スタックと後置記法(RPN)は常に操作に使うので、RPL言語は理解しやすいはずです。
ALGモードしか使わない人がプログラミングを始めようとしてもRPL言語を難しく感じてやめてしまいそうな気がするのは私だけでしょうか。

結局、ALGモードを搭載して、RPNモードが分からない人をHPの世界に引き込んでも「HP社の電卓は難しい」と思われて終わりだったのではないでしょうか。HP 49G/49g+/50gは、GUIが古くて操作が難しく、プログラミング言語も後置記法(RPN)なので、ALGモードしか使わないユーザーには分かり難い電卓に過ぎません。

HP社はHP 49GでALGモードを付けるのではなくて、新シリーズの中置記法式のグラフ電卓を立ち上げるべきだったのです(HP 38/39/40のような教育用途専用ではなく、TI-89シリーズやTI-Nspireシリーズのような強力なもの)。

RPL言語搭載グラフ電卓はALGモードを付けずに新シリーズの電卓と並行して続けても良かったのではないでしょうか。

 

以上です。

 

hp 50G F2229AA ABA

hp 50G F2229AA ABA

 
Texas Instruments TI-89 Titanium Graphing Calculator 【米国版】【並行輸入品】

Texas Instruments TI-89 Titanium Graphing Calculator 【米国版】【並行輸入品】

 
Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

 

 

最後のRPL言語搭載グラフ電卓 HP 50g(ハードウェア編)

RPL RPN グラフ電卓 関数電卓 HP 50g

今まで 4 Level RPN とRPL言語の説明を長々としてきましたが、ようやくヒューレット・パッカード社(以下HP社)のHP 50gのことについて書けます。

このグラフ電卓を理解するにはそれなりの前提知識が必要ですので、4 Level RPNとRPL言語の説明をしてきました。

f:id:nekosuki2017:20170228201203j:plain

というわけで、2016年10月に入手したHP 50gについて書いてみたいと思います。
今までに3つ記事を書いたTI-84 Plus CEとは段違いの機能の多さを誇ります。
その代わり操作の難易度もグラフ電卓史上最高かもしれませんが、それについては次回で書きます。

HP 50gを使うには当然のことながら英語力必須です。

 

関連記事

RPN と 4 Level RPN 電卓
RPL言語(4 Level RPNが大幅に進化)
RPL言語搭載電卓の歴史とその終焉
RPL言語の歴史的意義

 

目次

 

HP 50gの梱包

ここでは開封時(2016年10月)の写真を載せます。
HP 50gは他のアメリカの電卓と同様にブリスターパックに梱包されて販売されています。

f:id:nekosuki2017:20170228194028j:plain  f:id:nekosuki2017:20170228194113j:plain

ブリスターパックの上部をハサミで切って開封することになっています。開封後は元に戻せません。

f:id:nekosuki2017:20170228194310j:plain  f:id:nekosuki2017:20170228194600j:plain

付属品は以下のものが全てです。本体、単4電池、CR2032ボタン電池、mini USBケーブル、ソフトケース、Quick Start Guide、付属CDです。

f:id:nekosuki2017:20170228194730j:plain  f:id:nekosuki2017:20170228194851j:plain

HP 50gとTI-84 Plus CEの大きさ比較

ここからは2017年2月に撮影したHP 50gの写真です。

下はTI-84 Plus CE(スライドケースなし)とHP 50gの比較写真です。右がHP 50gです。

f:id:nekosuki2017:20170228195225j:plain  

下はTI-84 Plus CE(スライドケース装着)とHP 50gの比較写真です。右がHP 50gです。

f:id:nekosuki2017:20170228220458j:plain

側面から見ると厚みの差が分かります。
下図の左がスライドケースを付けたTI-84 Plus CEです。右はHp 50g。

f:id:nekosuki2017:20170228202302j:plain

下図の左はスライドケースを外したTI-84 Plus CEです。HP 50gとかなり厚みが異なります。

f:id:nekosuki2017:20170228202254j:plain

写真を見ても分かるように長さはTI-84 Plus CEの方が長いのですが、厚みはHP 50gの方が分厚いです。TI-84 Plus CEは特殊形状バッテリーを内蔵し、HP 50gは単4電池4本を内蔵するという違いによるものでしょう。

HP 50gの外観

ここからはHP 50gだけを見てみましょう。

f:id:nekosuki2017:20170228201203j:plain

見ての通りボタン数が多く51個もあります。本体やボタンにもこれでもかと言うくらい文字が印刷されています。

その上、シフトキーが3つ( ALPHA(黄)、左シフトキー(白)、右シフトキー(橙))もあって1つのキーに多くの機能が割当てられています。左シフトキーと関連したキーは45個、右シフトキーと関連したキーは39個ですので、合計で84もの記号と機能が2つのシフトキーに割当てられています(カーソルキーとの組合せは除く)。

その上、アルファベットキーで26の大文字が入力できます。アルファベットキー+左シフトキーと組合せて26の小文字も出せます。
アルファベットキー+右シフトキーと組み合わせるとギリシャ文字13文字と特殊文字6文字を出せたりもしますが、ボタンや本体に印刷されていません。

ボタンや本体に印刷されていない文字を入力するために右シフト+EVALで文字入力画面を出すこともできます。

 

f:id:nekosuki2017:20170228202940j:plain

f:id:nekosuki2017:20170228202946j:plain

側面はほぼ左右対称です(厳密に言うと"hp"の刻印は左右対称になれない)。
手前に膨らんでいる部品(hpの刻印が入っている部品)が少しだけザラザラとしていて手で握った時に少し滑りにくくなっています。

 

f:id:nekosuki2017:20170228203411j:plain

上はHp 50gの上端の写真です。

左の端子はmini USB端子です。右の端子は独自形状のシリアルポートです。中央にIrDA(赤外線通信)があるのですが、黒いプラスチックに覆われて見えません。

右のシリアルポートは "user's guide" にRS-232と書かれているのですが、電圧は3.3VとRS-232の規格(±5V~±15V)より低い上に端子形状が独自です。つまり、そのままではRS-232として使えません。

しかし、HP社はこのシリアルポート専用のケーブルを販売しませんでした。
その代わり、hpcalc.org がケーブルを販売しています。レベルシフトもしてくれるようです。

HP 50g RS-232 Serial Cable
http://commerce.hpcalc.org/serialcable.php

 

f:id:nekosuki2017:20170228204018j:plain

上はHP 50gの下端の写真です。SDCARDが入るようになっています。

f:id:nekosuki2017:20170228204741j:plain f:id:nekosuki2017:20170228204831j:plain

SDCARDは裏面を上にして入れます。

f:id:nekosuki2017:20170228205018j:plain

基本的には1GBのSDCARDしか使えないのですが、2GBのものでも非公式だが使えるとのネット情報もあります(ただし、2GB中の1GBしか使えない)。2GBよりも大きいものは完全に認識できませんので、要注意です。

f:id:nekosuki2017:20170228205720j:plain  f:id:nekosuki2017:20170228205737j:plain

中国製です。中央より下の文字が入った部分に小さなRESETの穴が開いています。

電池フタを開ける

電池蓋を開けてみましょう。

f:id:nekosuki2017:20170228211134j:plain  f:id:nekosuki2017:20170228211155j:plain

私は単4のエネループ4本を使っています。付属のアルカリ電池は2ヶ月で消費しました。激しく使う人なら1週間程度で消費するかもしれません。

次にバックアップ用電池CR2032を外してみましょう。
単4電池とCR2032を同時に外すと{HOME}ディレクトリの内容が全部消えます。ですので、CR2032を外す前に単4電池を再び入れておきます。

f:id:nekosuki2017:20170228211459j:plain  f:id:nekosuki2017:20170228211527j:plain

f:id:nekosuki2017:20170228211554j:plain  f:id:nekosuki2017:20170228211621j:plain

f:id:nekosuki2017:20170228212157j:plain  f:id:nekosuki2017:20170228212245j:plain

CR2032ボタン電池のフタ(Plate)の右側にある出っ張り(Holder)の穴をボールペンで押さえながら、フタを右にずらすとフタが外れます。このフタの外し方は独特だと思いました。少なくとも自分は初めて見た方式です。

液晶画面

ご覧の通り画面解像度は白黒131×80画素とかなりの低解像度です。階調表現もできません。

f:id:nekosuki2017:20170228212445j:plain  f:id:nekosuki2017:20170228212513j:plain

f:id:nekosuki2017:20170228212540j:plain  f:id:nekosuki2017:20170228212608j:plain

f:id:nekosuki2017:20170228212634j:plain

メモリ構成

f:id:nekosuki2017:20170228213322j:plain

上の写真はHP 50gのファイルマネージャーという機能を使ってHP 50gのファイルシステムを表示しているところです。

液晶画面の左側の数値をポート番号といいます。
HP 50gではメモリの種類をポート番号で分類します。

ポート0 : IRAM - 最大241KBのRAMです。{HOME}ディレクトリを格納しています。

ポート1 : ERAM - 最大128KBのRAMです。"user's guide"にはIRAMと分かれている理由は書かれていません(バンク切替の都合?)

ポート2 : FLASH - 内蔵フラッシュメモリです。容量は2MBあるのですが、OSが1MBほど使うので、余りは1MB以下です。

ポート3 : SD - SDCARDです。容量は1GBしかありません。

Home - デフォルトのカレントディレクトリです。ポート0 : IRAMの一部です。通常はここに変数、プログラムなどを保存します。自分でディレクトリを作ることもできます。

CASDIR - CASが使用するファイルを置く場所です。Homeの中に自動的に作成されます。

バックアップ用電池CR2032はポート0 : IRAM、ポート1 : ERAM、Home(当然CASDIR含む)を維持しています。

ちなみにポート0 : IRAMとポート1 : ERAMの最大容量を合計しても369KBしかありません。HP 50gのRAMは512KBですので、512KB-369KB=143KBはOSが使用している可能性があります。

キーボード

f:id:nekosuki2017:20170228214010j:plain

押した感じは少し固め、キーストロークは短めです。クリック感はプチっとした感じです。しっかりと押さないといけないので、早打ちには向いていないと思います。
キーの大きさがまちまちなので、キーが探しにくい気がします。
キーの中でも最も小さいファンクションキー(液晶画面の下に並んでいる6つのキー)は小さすぎて押しにくいと思います。

しかし、TI-84 Plus CEのキーボードよりは押しやすいと思います(クリック感が弱くて、押し始めにキーがわずかにグラつくため)。

ハードウェア総評

解像度の低い液晶画面(131×80画素)、1GBしか使えないSDCARD、分厚い本体、機能ボタンだらけのキーボード。2006年発売開始だとしても古い感じは否めないと思います。HP 50g発売年から8年前の1998年に発売されたTI-89ですら液晶解像度は160×100画素はあったのですから。

結局、ARM CPU 75MHz+Saturn CPUエミュレータの限界だったと思います。
Saturn CPU搭載電卓(HP 48シリーズ、HP 49G)との互換性を維持するためにわざわざ4bit Saturn CPUをエミュレーションするのですから速度は期待できません。
速度が遅いのに画面解像度を大幅に上げることはできなかったでしょう。

それにSaturn CPUのアドレス空間は512KBと狭く、それ以上のメモリを扱う時はバンク切替(アドレス空間の一部を別のメモリに切替えてアクセスできるメモリを増やす古い技術)のようなことをしているはずです。

バンク切替は万能ではありません。アドレス空間の一部を切替えるだけですので、アドレス空間512KB=一度にアクセスできるメモリ容量は広がりません。
それにバンク切替は速度的なコストがあります。例えば、2MBのフラッシュメモリにアクセスするとき、アドレス空間は512KBしかないので、フラッシュメモリに一度にアクセスするのは不可能です。さらにアドレス空間中にOSが動くためのRAMが常に必要ですので、バンク切替に使えるアドレス空間は512KB中の一部です。
そのため、アドレス空間の一部だけをフラッシュメモリの一部だけに切替えることを繰り返して少しずつ読み出すしかありません。フラッシュメモリからRAMへコピーする必要が生じることもあったと思われます。どうしても速度的には不利でしょう。
このようにSaturn CPUの限界を引継いでしまったのです。

ちなみに対抗機種のTI-89シリーズの場合、MC68000という内部32bit、外部16bit、アドレス空間は16MBという高級なCPUを使っています。もちろんバンク切替不要です。

本体が分厚いのは単4電池4本のせいですが、TI-84 Plus CEのような特殊形状の内蔵充電式電池が必ずしもいいとは思えません。上の写真を見てのように薄くできる利点はあります。しかし、TI-84 Plus CEを使っているときに電池残量が少なくなってもスマホの充電器は使えません。なぜならスマホの充電器はmicro USBだからです。TI-84 Plus は mini USB です。HP 50gのように単4電池4本+CR2032なら入手性は高いし、コンビニで売っている電池交換式のスマホの充電器(1000円前後)よりも安いはずです。

HP 50gは古いところが多いグラフ電卓ですが、過去の機種から長年の機能を積み上げた結果、その機能は物凄い量になっています。

しかし、お勧めできる人がいるとしたらRPL言語が好きな昔からのHP電卓マニアだけなのかなという気もします。
あるいは私のようなもの好きか。

補足ですが、HP 50gは2015年に製造終了となったので、最近在庫がなくなってきたのか価格が高騰しています。私が購入した2016年10月だと1万円±1,000円程度だったのですが、2017年2月28日にAmazon.co.jpで確認すると14,000円程度に高騰しています。
最後のRPL言語搭載電卓としては貴重ですから価格が高騰するのも当然かもしれません。

 

以上です。

 

次回は「最後のRPL言語搭載電卓 HP 50g(ファームウェア編)」を書く予定です。 

 

hp 50G F2229AA ABA

hp 50G F2229AA ABA

 

 

 

はてなブログは長文が読みにくい

その他

表題の通り、長文が本当に読みにくいです。文章を表示している幅が狭いからです。

おかげで読み返しても間違いに気がつきにくく、前の記事は公開してから何度も修正してしまいました。

そもそもブログをWebページ代わりに使ったのが失敗のような気がします。
誰でも理解できるような簡単なことを書くのがブログなのかもしれません。

 

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

 

 

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

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

RPL言語搭載電卓の歴史を書いてみます。完全な個人研究ですので悪しからず。

目次

RPL言語の誕生

1984年にヒューレット・パッカード社はRPL言語を開発したと言われています。
ただし、実用化されたのはその数年後ですので、プロトタイプ程度のものだった可能性はあります。

RPL言語には2種類あります。User RPL と System RPL です。
通常は User RPL のことをRPL言語と呼びます。User RPL言語はインタープリタ言語でした。

一方の System RPL は電卓のOSをアセンブリ言語で書くのが大変だったので、アセンブリ言語の代わりに開発された言語です。User RPLと違ってコンパイラ型言語です。文法も大幅に異なりますが、スタックベースで動作するのは共通のようです。

参考資料
RPLMan from Goodies Disk 4 : http://www.hpcalc.org/details/1743

OSが System RPL で作られた電卓の登場

OSをRPL ( System RPL )で書かれた電卓はビジネス用電卓 HP-18C(1986年)が最初です。しかし、プログラミングはできませんでした。
しかも中置記法的でありながら変わった入力方式でした。
例えば、5×(2+3 まで入力したときに )ボタンを押すと、括弧の中身(2+3)の計算が始まって表示が5×5に変化するという変わった方式でした。
そのため、使用者はRPNやRPLの存在を感じなかったと思われます。
本機の場合、OSを書くのに System RPL言語を使ったというだけのようです。

参考ページ
HP-18C : http://www.hpmuseum.org/hp18c.htm

RPL( User RPL )言語でプログラミングできる電卓の登場

最初にRPL (User RPL) 言語のプログラミングができる電卓はグラフ電卓 HP-28C(1987年)でした。実質的にはこれが最初の「RPL言語搭載電卓」でした。
HP-28CはCAS(数式処理システム)を搭載した最初の電卓と思われます。フルキーボードを備えているため電卓上のプログラミングは後継機よりも楽だったでしょう。1988年には改良型HP-28Sも発売されました。

どちらも画面は白黒137×32画素と広いとは言えないものでした。
HP-28シリーズは外部入出力ができないためプログラムの外部保存は不可能という欠点もありました。

1990年からHP社はHP 48シリーズの最初の機種HP 48SXを発売しました。HP-28シリーズの後継機種です。HP 48シリーズもRPNかつRPL言語を搭載しており、RPL言語搭載電卓の中では最も売れたシリーズです。HP-28シリーズになかった外部インターフェイスも追加され、シリアル通信と赤外線通信ができるようになりました。画面も大型化し、白黒131×64画素と2倍近くになりました。(何故か画面幅は6画素減った)

テキサス・インスツルメンツ社がグラフ電卓に参入

一方、テキサス・インスツルメンツ社(以下TI社)は同年の1990年に教育用グラフ電卓TI-81を発売し、教育用グラフ電卓の市場に先手を打ったのです。TI-81はTI社の最初のグラフ電卓でした。
1985年にCASIOが世界最初のグラフ電卓 fx-7000G を発売し、1987年にHP社が HP-28C を発売した経緯からすると、TI社は明らかに後発でした。そのため、教育市場からグラフ電卓の発売を始めたのかもしれません。TI-81は後のTI-84 Plusシリーズに繋がり、グラフ電卓市場の独占に貢献することになります。もちろん、TI社のグラフ電卓はRPNではありません。

1995年にHP社も遅れて HP 38G を発売して教育用電卓に参入しました。その理由はよく分かりませんが、PCの普及などの理由でHP 48シリーズの売上が減ってきたのかもしれません。あるいはTI社が教育市場で成功しているのを見て参入を決めたのかもしれません。HP 38GはHP社の電卓なのにRPNもRPL言語も搭載していませんでした。HP社は教育関係者の意見を聞いた結果としてRPNの採用を見送りました。その後もHP 38GはHP 39/40シリーズへと発展していきましたが、商業的にはうまく行かなかったようです。

TI社は1995年にTI-92、1998年にはTI-89という高性能グラフ電卓を発売し、教育用途ではないHP 48シリーズも追撃しました。特にTI-89シリーズは名機と言われており、2017年2月現在でもその改良版のTI-89 Titanium(2004年発売)が製造されています。TI社のグラフ電卓はRPNではありません。結局、消費者はRPNを選ばなかったのです。

ヒューレット・パッカード社の迷走

1999年にHP社はHP 48シリーズの後継機種であるHP 49Gを発売しました。HP 49GはRPNとRPL言語を搭載していましたが、初期設定でRPNが使えなくなりました。初期設定ではALGモードと呼ばれる中置記法のモードになったのです。つまりHP社もRPNは消費者に受け入れられないと判断したのです。ただし、根強いRPN愛好家のためにRPNモードをオプションで残したのでしょう。しかし、初期設定はALGモードなのにプログラミング言語RPNと関係の強いRPL言語のままというチグハグな感じになりました。ボタンがゴムになるなど退化した面もありました。しかも1999年になってもCPUはSaturnという4bitマイコンを搭載していました。これではMC68000という内部32bitのCPU(外部バスは16bit)を搭載しているTI-89シリーズよりも不利なのは当然でした。

その後、HP社に転機が訪れました。Saturn CPUを製造していたNECの技術的都合でSaturn CPUが製造できなくなったのです。しかし、HP社は保守的な選択肢を選びました。新シリーズを立ち上げるのではなく、ARM CPU上でSaturn CPUのエミュレータを動作させて既存OSを多少の修正だけで動作させる方法を選んだのです。

結局、2003年に発売されたHP 49g+は、ARM CPUを搭載したにも関わらず、HP 49Gの改良型に留まりました。評判の悪かったゴムキーはプラスチックに変わりました。RS232CをUSBに変えたりSDCARDスロットを搭載するなど時代に合わせた変更もありましたが、画面は131×64画素から131×80画素に増えたという僅かな改良に留まりました。ARM 75MHz上で動作する Saturn CPU のエミュレータは HP 49G の Saturn CPU よりは数倍高速でしたが、常時Saturnエミュレータという無駄なソフトを動かしてARM 75MHzの性能を無駄にしているだけでした。
(注)HP 49g+は、ARMのアセンブリ言語とHPGCCでコンパイルしたC言語のコードを実行するときだけは、Saturn CPUエミュレータを迂回して本来の性能を発揮できた。もちろんそんな機能があっても電卓としての性能が上がるわけではないが。

2006年にRPL言語を搭載した最後のグラフ電卓 HP 50g が発売されました。しかし、HP 49g+から大幅には改良されませんでした。改良点は打ちやすくなったキーボード、シリアル通信の追加、ファームウェアの機能追加程度でした。

このようにHP社が迷走している間にTI社は2004年にグラフ電卓市場独占の決定打となる教育用グラフ電卓 TI-84 Plus を発売しました。TI-84 Plus は性能的には同時期の教育用グラフ電卓 HP 39g+ と比べて一長一短程度のものでした。しかし、TI社は1990年からTI-81/82/83/83 Plus(工学向けのTI-85/86もあった)と教育市場で着実に市場専有率を高めていました。教育関係者は使用する電卓を統一しないと不便なので、市場専有率の高いTI社のグラフ電卓を選ぶのは当然の流れでした。

TI-Nspireシリーズの登場。グラフ電卓は次の時代に突入

2007年にTI社はTI-Nspire/TI-Nspire CAS(CASなし版とCASあり版に分かれている)という高性能電卓を発売しました。一年前に発売されたHP 50gより約7.3倍も高解像度の画面(グレースケール320×240画素)を持ち、処理速度も高速(当初ARM 90MHzだが、OSの更新で120MHzになったという説もある)、操作性も機能呼出ボタンを最小限にしてGUIで操作する新しい方式を取っていました。機能ボタンだらけのHP 50gとは対照的でした。

HP 50gも ARM 75MHz とそこそこの性能のCPUを搭載していましたが、Saturn CPUエミュレータのせいで処理性能は非常に低下していました。それに比べるとTI-Nspireはそのような足かせがないのでHP 50gよりも高速に動作しました。
ちなみにCASなし版のTI-NspireにはTI-84 Plusのエミュレータが搭載されていましたが、TI-84 Plus互換モードの時だけ動作するので、性能に影響はありませんでした。

TI-Nspire CASはHP 50gより格段に進歩したものでした。HP社はもう敵わないと思ったのかHP 50gの後継機種を開発しませんでした。しかし、根強いユーザーに支えられて製造は2015年まで続きました。

TI社はTI-Nspireシリーズの改良を続けました。
2010年のTI-Nspire with Touchpad/TI-Nspire with Touchpad CASスマホのようなタッチパネルを搭載。
さらに2011年2月にTI-Nspire CX/TI-Nspire CX CASを発売しました。高解像度カラー液晶(16bitカラー320×240画素)を搭載、CPUはARM 150MHz、前機種と同様にタッチパネルを搭載していました。

CASIOもCASなし版のTI-Nspire CXに対抗して、カラー液晶画面(16bitカラー396×224画素)を搭載した Prizm fx-CG10 (この日本版が fx-CG20)を TI-Nspire と同時期に発売しました。

HP社は2011年10月に非RPN教育用電卓 HP 39/40シリーズの最後の機種 HP 39gII を発売しました。液晶画面はグレースケール256×128画素と向上し、ライブラリの一部はARMコードになるなど改善は見られましたが、8ヶ月前に発売された TI-Nspire CX に比べると見劣りするものでした。結局、HP 39/40シリーズもこれが最後になりました。

2013年にHP社はHP PrimeというTI-Nspireシリーズへの対抗機種を出してやっとTI社に追いつきました。高解像度カラー液晶(320×240画素)を搭載し、CPUはARM 400MHzと強力です。Saturn CPUエミュレータは廃止され、CPU本来の性能を発揮できるようになりました。しかもTI-Nspireシリーズと違ってCASなし版とCASあり版に分かれていません。1台でCASなしモードとCASありモードに切替できます。

しかし、RPL言語は採用せず、PPL( Prime Programming Language )を採用しました。HP社はPascal風言語と説明しています。

HP Primeの初期設定の操作方法はテキストブック(教科書表示入力)ですが、オプションでRPNも一応使えます。ただし、CASモードだとRPNは使えません。CASなしモードでRPNが使えるだけです。

RPL搭載電卓の製造終了とPRL言語の現状

2015年秋にHP社はHP 50gの製造終了を発表しました。1987年から28年以上続いたRPL言語搭載電卓の歴史は幕を閉じました。

2017年2月現在、HP 50gの在庫はまだ残っているようですが、いつなくなるのか分からない状況です。

PCやスマホ用にHP 50gのエミュレータが存在するので、RPL言語はエミュレータで生き残るかもしれません。

有志によってnewRPLというRPL言語の後継言語も作られていますが、2017年2月現在でもα版という状況です。しかもHP 50gが製造されなくなったので、次の対象ハードウェアを決めないといけません。HP社のクローン電卓を作っているSwissMicros社のハードウェアになる可能性もありますが、決定はしていないようです。

(参考ページ)newRPL : http://hpgcc3.org/projects/newrpl

 

以上です。 

 

hp 50G F2229AA ABA

hp 50G F2229AA ABA

 
Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

Texas Instruments Nspire CX CAS N3CAS/CLM/2L1 Graphing Calculator [輸入品]

 

 

 

RPL言語(4 Level RPNが大幅に進化)

RPN グラフ電卓 関数電卓 RPL

前回の記事の続きです。RPN と 4 Level RPN については以下の前回の記事をお読み下さい。

calculator2017.hatenablog.jp

 

目次

はじめに

ここではヒューレット・パッカード社(HP社)のRPL言語のことを説明します。
RPL言語には User RPL と System RPL の2種類があるのですが、一般的には User RPLのことを RPL言語と言います。

System RPL はOSとシステム記述用の言語で通常は使いません。私は System RPL の知識がないので、説明もできません。

実験に使った電卓はHP 50gです。ファームウェアのバージョンは下図のように2.15です。

f:id:nekosuki2017:20170224214917j:plain
ただし、ここで説明するのはRPL言語の使い方ではなくて、RPL言語とはどのようなものか?ということです。つまり実用的な説明はありません(やろうと思っても仕様が膨大で不可能だが)。

RPL言語搭載グラフ電卓(HP-28シリーズHP 48シリーズHP 49シリーズHP 50g)の操作はRPL言語をGUIから呼び出しているだけです。
ですからRPL言語を理解することによって、RPL言語搭載グラフ電卓の仕組みが見えてきます。

RPL は Reverse Polish Lisp (逆ポーランドLisp)の略です。
しかし、実際の文法はLisp言語と全く似てなくて、Forth言語に似た言語です。
RPL言語は1984年に開発されたと言われています。そして、1987年にグラフ電卓HP-28Cとして商品化されました。
RPL言語のおかげで 4 Level RPN では実現できない変数を含んだ代数式を扱えるようになったのです。 

4 Level RPN との違い

4 Level RPN は数値だけを扱うものです。
一方、RPL言語のRPNは「先に引数を書いて、関数やコマンドを後ろに書く言語」という意味になっています。RPL言語で言う引数は数値とは限りません。変数、文字列、リスト、数式、プログラムブロック(後述)かもしれません。つまり、4 Level RPNと違って、数値以外のものが扱える拡張された概念になっているのです。

例えば、中置記法(普通の数式の記法)の COS(2*X) をRPL言語プログラムで表現すると、

 « 2 X * COS »

となります。RPNと同じ考えです。
RPL言語はプログラムを« »で囲む必要があります。« »で囲まれたプログラムをプログラムブロックと言います。

RPL言語の場合、*もコマンドです。通常のプログラミング言語(C/C++, JAVA, C#など)の場合、*は演算子ですが、RPL言語ではコマンドです。RPL言語はRPNの考え方で記述するので、コマンドの前に引数があります。
ですからプログラムブロック « 2 X * COS » の*の前にある2とXは*コマンドの引数です。*コマンドの結果はCOS関数の引数となります。*コマンドが前にある2つの引数を取るのは前回説明した 4 Level RPN に似ています。しかし、数値ではない変数Xが使えるようになっています。RPL言語は前述のように数値と変数以外のものも使えます。

オブジェクトとスタック

RPL言語ではコマンドと関数が取ることができる引数をオブジェクトと言います。
オブジェクトは数値、変数、文字列、リスト、数式、プログラムブロックなどの総称です。
先程のプログラムブロック « 2 X * COS » の場合、2とXがオブジェクトになります。そして、そのプログラムブロック自身もオブジェクトになります。

ここでRPL言語のスタック(念のために書いておくが、CPUのスタックではない)を見て下さい。下図はRPL言語搭載電卓HP 50gのスタックに色々なオブジェクトが入っている様子です。

f:id:nekosuki2017:20170224220737j:plain

オブジェクトの種類は、6:数値、5:変数、4:文字列、3:リスト、2:代数式、1:プログラムブロックです。

このようにスタックに様々な種類のオブジェクトを入れることができるようになったのです。画像を見ても分かるように4 Level RPNのスタックと違ってX,Y,Z,Tのような名前はなく、下から1: , 2: , 3: ,・・・と番号が振られているだけです。オブジェクトの出し入れは下の1:から行います。

スタックの中を見ると代数式が中置記法で書かれています。実はRPNは代数式を扱うのが苦手なので、代数式はRPNではなくて中置記法で書く必要があるのです。

数値以外のものがスタックに入っているものをRPN(逆ポーランド記法)と言うのは妙な気もしますが、スタックを数値だけでなくオブジェクトを置く場所に拡張したのです。RPL言語が変数の入った代数式を扱うにはどうしてもこのような拡張が必要だったのです。

RPL言語が解釈・実行される手順

RPL言語はインタープリタ言語です。インタープリタとはコンピュータ言語を少しずつ読みながら逐次実行する方式です。

インタープリタの対語にコンパイラがあります。コンパイラはプログラム全体を一括で機械語(CPUが直接実行できる命令)に変換する方式です。インタープリタよりも高速に動作しますが、部分的な修正をする度にコンパイルという機械語への変換をやり直す必要があります。プログラムが長いとコンパイルは時間がかかります。
一方、インタプリタではコンパイルの必要がありません。そのため、即興的にプログラムを作りたい電卓ではインタープリタ言語を使うことが多いのです。

RPL言語のインタープリタはプログラムを左から右、上から下へ読んでいきます。
« 2 X * COS » の場合、一行ですので、上から下へ読む必要はありません。左から右に読むだけです。
下図はスタック1:に « 2 X * COS » を手入力で入れた状況です。

f:id:nekosuki2017:20170224221257j:plain

RPL言語搭載電卓のEVAL(評価)ボタンを押すと実行されます。
1:のオブジェクトを評価するとプログラムブロックなので実行するべきものと評価されて実行されます。

以下のような動作になります。

  1. インタープリタは「2」に遭遇して、それをオブジェクトと判断し、スタックにいれます。
  2. インタープリタは「X」に遭遇して、それをオブジェクトと判断し、スタックにいれます。
  3. インタープリタは「*」に遭遇して、それをコマンドと判断し実行します。スタックに入っている2つのオブジェクトが取り出されて乗算されます。このとき、変数Xが存在するかどうかと関係なく'2・X'という結果にして、スタックに戻します。
  4. インタープリタは「COS」に遭遇して、それを数学関数と判断し実行します。
    変数Xが存在しない時の結果はCOS(2・X)になります。
    変数Xが存在するときは(2・X)が計算されてCOS(数値)になります。
    そして、その結果をスタックに戻します。

実行後、スタックの1:にはCOS(2・X)あるいはCOS(数値)が入ります。

変数Xが存在しない場合は下図のようになります。Xは未知数として扱われます。

f:id:nekosuki2017:20170224221540j:plain

変数 X = 'π+1' の場合、下図のようになります。

f:id:nekosuki2017:20170224221611j:plain

変数 X = 'π+1' のときでも結果が数値にならないのは、今回の実験で使ったHP 50gのCAS(数式処理システム)は初期設定でFLAG -3(関数を数値化するシステムフラグ)が無効になっているからです。

強制的に COS(数値) を数値にするには→NUMコマンドを使います。
つまり、プログラムを « 2 X * COS →NUM » と変更すれば、結果は数値になります。
ただし、Xが未定義のときは数値化できないのでエラーになります。

前述の動作から分かるようにRPL言語インタープリタの動作は基本的に以下の2つです。

  1. オブジェクトに遭遇したらオブジェクトをスタックに入れる。
  2. 関数やコマンドに遭遇したら実行する。

以上のようにスタックの動きを念頭に入れてプログラミングをする必要があります。
そのため、コードの可読性は低めになっています。

条件分岐命令は厳密な後置記法(RPN)になっていない

IF文のような条件分岐命令は厳密な後置記法(RPN)になっていません。
例えば、スタックの1:の値が10よりも大きいかどうかを判断して、10よりも大きい場合は"LARGER THAN 10"という文字列をスタックに返すプログラムを見てみましょう。(このプログラムを実行すると1:にあった数値は消えてしまいます)

RPL言語では「>」ですらコマンドであることに注意して下さい。

 « IF 10 > THEN "LARGER THAN 10" END »

「10 >」がIF文の条件文です。後置記法を徹底するならIF文の前に条件文があるべきです。実際に後置記法を徹底したForth言語ではIF文の前に条件式を書きます。しかし、さすがにそれは読み難いので、RPL言語ではIF文の後ろに条件式を書くことになっています。
(あるテクニックを使うとForth言語のようにIF文の前に条件式を書くこともできます。しかし、Forth言語のようにTHENとELSEの前に文を書くことはできないので、あまり意味はないと思います)

IF文が厳密な後置記法でなくても条件文「10 >」は後置記法の考えで実行されます。
ここでプログラムの実行前にスタックの1:に11が入っていると仮定します。

f:id:nekosuki2017:20170224222557j:plain
この11という値が10より大きいかどうかを比較することになります。

先ほどと違ってプログラムはファイル化されたものを実行するという仮定にします。そのためスタックにプログラムを入れる必要はありません。
プログラムを実行するとIFの右にある10はオブジェクトなので、スタックに入れられます。
そのため、>コマンドを実行する前のスタックの状態は下図のようになります(下図は説明のために作成した図であり、実際にはこのようなプログラム動作中の状態は表示されません)。

f:id:nekosuki2017:20170224222705j:plain

次に>コマンドが実行されスタックから2つの値を取り出します。そして、

 「 2:に入っていた数値 > 1:に入っていた数値 」

の真偽を判断します。

この場合、「11>10」なので真です。よって、>コマンドはスタックに真(1)を返します。
IF文はスタックから値を1つだけ取り出して、それが真(1)なのか偽(0)なのかを判断します。
真(1)の場合は、THENを実行し、偽(0)の場合はELSEを実行します。ただし、上のプログラムではELSEがないので偽のときは何もしません。
この例の場合、真なので、THENが実行されます。THENの次の"LARGER THAN 10"はオブジェクトなのでスタックに入れられます。その結果、下図のようになります。

 f:id:nekosuki2017:20170224223806j:plain

これで期待通りの結果になりました。

ところで、画面の一番下に表示されている[IOPAR][RPLBR]などをソフトメニューと言います。他の図とソフトメニューの表示が変わっていますが、この図では画面の上の方に表示されている {HOME} ディレクトリのファイル名をソフトメニューに表示させています(ファイル名だけではなく関数や機能も表示できます)。

左から2番目の[RPLBR]と表示されているのがファイル化された上のプログラムです。液晶画面の下にソフトメニューと同じ数(つまり6個)のボタンが並んでいます。[RPLBR]の下にあるボタンを押すとプログラムが実行されます。RPL言語搭載電卓はこのようにファイル化したプログラムをボタンで呼び出すことができます。

RPL言語搭載電卓の操作はRPL言語をGUIから呼び出しているだけ

最初の方で書いたようにRPL言語搭載グラフ電卓の操作はRPL言語をGUIから呼び出しているだけです。

例えば、COS(X)のマクローリン展開をしたいときにスタックの底辺に'COS(X)'という数式を入れておきます。

f:id:nekosuki2017:20170224223946j:plain

TAYLOR0関数を呼ぶと、TAYLOR0関数がスタックから COS(X) を取り出してマクローリン展開を行います(何故TAYLOR0がマクローリン展開を意味するのかは数学の知識があれば分かるでしょう)。

電卓を操作して下図のように画面下のソフトメニューに[TAYLO]を表示します。操作方法についてはここでは触れません。

f:id:nekosuki2017:20170224224121j:plain

画面下のソフトメニューの [TAYLO] を押すと、TAYLOR0関数が実行されます(ソフトメニューは5文字しか表示できないため)。

TAYLR0関数はスタックからCOS(X)を取り出し、マクローリン展開を行い、その結果をスタックに返します。

f:id:nekosuki2017:20170224225256j:plain

COS(X)がマクローリン展開されました。このように 4 Level RPN よりも格段に強力なことができるようになったのです。

上の例からも分かるようにRPL言語搭載電卓はGUIからRPL言語を呼び出しているだけなのです。GUIからRPL言語を使うか、プログラムから直接RPL言語を使うかだけの違いなのです。

RPL言語の資料と開発環境

全てのRPL言語搭載電卓はすでに製造終了になっています。
最後のRPL言語搭載電卓はHP 50gでしたが、2015年に製造終了在庫のみとなっています。

しかし、2017年2月時点では資料やWindowsで動くエミュレータと開発環境もまだ残っています。 

 

RPL言語のマニュアル
http://support.hp.com/us-en/product/hp-50g-graphing-calculator/3235173/manuals

ここの "HP 48gII and 50g Graphing Calculator Advanced User's Reference Manual (V2)" がRPL言語の資料です。
ただし、電卓の操作を覚えてこそのプログラミング言語ですので、これだけを読むことに意味はないと思います。 

 

Debug 4x
http://www.hpcalc.org/details/5441

HP 48シリーズ/HP 49シリーズ/HP 50gのエミュレータ(Emu48)が付いた統合開発環境(IDE)です。Windows用。
実機を持っていなくてもRPL言語を試すことができます。

GUIが煩雑で使いやすいとは思いません。テキストエディタでRPL特有の文字(«,»など)を打つ時はHELPに書いてあるエスケープシーケンスを覚える必要があります。

Version 2.2 Build 168a を使ったことがあるのですが、IDEで.hpファイル(実行ファイル)を生成してSDカードに入れてもHP 50gで何故か認識できませんでした。エミュレータの方で.hpファイルを生成するとHP 50gがちゃんと認識してくれるのですが。

2015年8月を最後に更新されていません。HP社がHP 50gの製造終了を発表したのが2015年秋ですので、更新がもう終わったのかもしれません。 

 

HPUserEdit
http://www.hpcalc.org/details/6600

HP 48シリーズ/HP 49シリーズ/HP 50gのエミュレータ(Emu48)が付いた統合開発環境(IDE)です。Windows用。
実機を持っていなくてもRPL言語を試すことができます。

Debug4xより分かりやすいと思います。テキストエディタの左側にコマンド一覧とRPL言語用記号が表示されていて使いやすくなっています。
IDE自体で.hpファイルを生成することはできないようでプログラムをエミュレータに送って.hpファイルを生成します。

初期設定時はスペイン語で表示されるので、設定で英語に切り替える必要があります。
しかし、英語に切替えてもメニューの一部が文字化けします(Windows7 64bit 日本語版で試したとき)。

残念ながら2009年5月から更新が止まっています。

 

Emu48
http://hp.giesselink.com/emu48.htm

前述のDebug4xとHPUserEditに付属しているエミュレータですが、単体で動作させるのはかなり面倒です。機種毎にKML (Keyboard Mapping Language) ファイルの入手やROMイメージの作成(実機のROMイメージを付属コマンドラインツールで変換)が必要です。

前述のDebug4xとHPUserEditをインストールするとその手間が必要ないので、Debug4xやHPUserEditをインストールすることをお勧めします。


以上です。

  

hp 50G F2229AA ABA

hp 50G F2229AA ABA

 

 

RPN と 4 Level RPN 電卓

RPN 関数電卓 金融電卓

今回はヒューレット・パッカード社の電卓で使われている 4 Level RPN について書いてみたいと思います。

(注)2015年11月にヒューレット・パッカード社はHP Inc.とヒューレット・パッカード・エンタープライズの2つに分離しましたが、ここではヒューレット・パッカード社(以下HP社)とします。

目次

RPNについて

RPN は Reverse Polish Notation(逆ポーランド記法)という数式の記述方法です。
我々が学校で習って使っている数式は「中置記法」と言うもので、例えば、

 1 + 2

と書きます。
しかし、RPNの場合は同じものを

 1 2 +

と書きます。後置記法とも言います。
これを日本語に似ていると言う人もいます。上の例では「1と2を足す」と解釈できます。
しかし、複雑な数式ではそのような意見にあまり意味がないと思います。
例えば、中置記法で (2 + 4) * (5 - 3) / (9 + 1) と書いたものをRPNで表現すると、

 2 4 + 5 3 - * 9 1 + /

となります。
これを日本語で解釈すると「2と4を足したものを、5から3を引いたものと乗算し、その結果を9と1を足したもので割る。」となります。
確かに数値と演算子の順序だけは日本語に似てますが、少し無理がありませんか?日本語に似ていたとしても分かりにくいだけです。中置記法で書いた数式の方が圧倒的に分かりやすいと思います。
インターネットで「RPNは日本語のままで考えることができる」と主張している人が多く見受けますが、上式よりもさらに複雑な式になると日本語で考えることに意味はないでしょう。そういう主張をする人たちはよほど簡単な計算しかしない人なのでしょうか?
私はRPNが日本語に似ているという見解に意味はないと思います。ただの数式の記法の一種と考えるべきでしょう。

4 Level RPNで "1 2 +" の計算をする

RPNの式を電卓で解く時はスタックというデータ構造を使って解く必要があります。
念のために書いておきますが、CPUのスタックではありません。
それと一般的なコンピュータ工学で使われるスタックのPUSH/POPの概念とは多少異なります。

ここではグラフ電卓ではないHP社の電卓(例えばHP 12cやHP 35s)で使われている 4 Level RPN を前提にしてRPNの数式"1 2 +"を解いてみます。

ボタン操作は、[1][ENTER][2][+]となります。数値と数値の間を区切るために[ENTER]が必要です。

下の図が4 Level RPNのスタックです。初期化時は0が入っています。
X,Y,Z,Tはレジスタと呼ばれるもので、一番下のXから数値を入れることができます。

f:id:nekosuki2017:20170221162140p:plain

電卓で1を入力すると下図のようになります。

f:id:nekosuki2017:20170221162201p:plain

そしてENTERを押すと、Z→T、Y→Z、X→Yとコピーされます。
上にずれるような感じです。このとき、Xは変化しません。

f:id:nekosuki2017:20170221162218p:plain

さらに電卓で2を入力すると下図のようになります。ENTERは押していません。

f:id:nekosuki2017:20170221162242p:plain

ここで、+ボタンを押すと、+コマンドが発動します。
+コマンドが下から(Xから)数値を2つ取り出すのですが、1回取り出す毎にY→X、Z→Y、T→Zとコピーされます。このとき、Tは変化しません。
つまり、ENTERを押したときと逆のような動きになります。下へずれるような感じです。
2つの数値を取り出すので、スタックは以下のように全て0になります。

f:id:nekosuki2017:20170221162421p:plain

これで1と2が取り出されました。この動作は表示されませんので、以後、コマンドが2つの数値を取り出すときの図は省略します。
+コマンドは計算結果をスタックに戻します。ENTERを押したときと同じ動作(この場合、スタックの内容は全て0なので意味はないが機械的に行う)をしてから1+2=3をXに入れます。

f:id:nekosuki2017:20170221162450p:plain

これでRPNの数式"1 2 +"の結果が出ました。

スタックの下から数値を入れて、出すのも下からが 4 Level RPN のスタックの基本です。コンピュータ工学のスタックでは上から出し入れするので、少し違っています。

ここでスタックの動作をまとめます。

  1. ENTERを押したとき:上にずれる。Z→T、Y→Z、X→Yとコピーされる(Xは変化しない。Tの内容は消える)
  2. コマンドが数値を1つ取出すとき:下にずれる。最初にXから数値を取り、Y→X、Z→Y、T→Zとコピーされる(Tは変化しない。Xの内容は消える)
  3. コマンドがスタックに結果を戻すとき:ENTERを押したときと同じ動作をしてからXレジスタに結果を入れる。

コンピュータ工学で言えば、2がPOPで、3がPUSHです。1はスタックを上にずらすだけなので、PUSHの一部です。1のENTERが通常のスタックの概念と少し異なるのです。これはPUSHと違って入れる数値を人間に入力させるためにこのようになっているのです。
これらの動作はスタックの基本ですので、今後の説明では省略します。

下の写真はHP 12c PlatinumがRPNモードで動作している写真です。

f:id:nekosuki2017:20170221162617j:plain

HP 12c Platinum は液晶表示装置が1行しかありませんので、常にXレジスタだけを表示しています。
HP 35sのように2行表示でX,Yレジスタを同時に表示できるものもあります。
どちらにしてもレジスタの一部しか表示されませんので、操作にはそれなりの慣れが必要です。

4 Level RPNで "2 4 + 5 3 - * 9 1 + /" の計算をする。

さらに前述のRPNの式 " 2 4 + 5 3 - * 9 1 + / " を解いて見ましょう。
(中置記法で (2 + 4) * (5 - 3) / (9 + 1)と同じ意味)

ボタン操作は[2][ENTER][4][+][5][ENTER][3][-][*][9][ENTER][1][+][/]となります。数値と数値の間に[ENTER]を押して数値を区切る必要があります。

スタックは0で初期化されているとします。 

f:id:nekosuki2017:20170221162140p:plain

最初に2を入力します。

f:id:nekosuki2017:20170221162903p:plain

そして、ENTERを押すと下図のようになります。

f:id:nekosuki2017:20170221162917p:plain

4を入力します。ENTERは押しません。

f:id:nekosuki2017:20170221162935p:plain

そして、+ボタンを押すと、+コマンドがスタックの下から2つ数値を取り出して加算し、その結果をスタックに戻します。この場合、2+4=6をスタックに戻します。

f:id:nekosuki2017:20170221163015p:plain

次に5を入力すると、自動的にENTERと同じ動作をしてからXレジスタに5が入ります。演算をした直後は自動的にENTERと同じ動作をします。

f:id:nekosuki2017:20170221163046p:plain

ここでENTERを押すと、下図のようになります。

f:id:nekosuki2017:20170221163102p:plain

3を入力します。ENTERは押しません。

f:id:nekosuki2017:20170221163116p:plain

ここで-ボタンを押すと、-コマンドがスタックの下から2つの数値を取り出して減算し、その結果をスタックに戻します。この場合、5-3=2をスタックに戻します。

f:id:nekosuki2017:20170221163128p:plain

さらに*ボタンを押すと、*コマンドがスタックの下から2つの数値を取り出して乗算し、その結果をスタックに戻します。この場合、6*2=12をスタックに戻します。

f:id:nekosuki2017:20170221163144p:plain

次に9を入力すると、自動的にENTERと同じ動作をしてからXレジスタに9が入ります。演算をした直後は自動的にENTERと同じ動作をします。

f:id:nekosuki2017:20170221163156p:plain

ここでENTERを押すと下図のようになります。

f:id:nekosuki2017:20170221163209p:plain

1を入力します。ENTERは押しません。

f:id:nekosuki2017:20170221163223p:plain

ここで+ボタンを押すと、+コマンドがスタックの下から2つの数値を取り出して加算し、その結果をスタックに戻します。この場合、9+1=10をスタックに戻します。

f:id:nekosuki2017:20170221163236p:plain

最後に/ボタンを押します。/コマンドがスタックの下から2つの数値を取り出して除算し、その結果をスタックに戻します。この場合、12/10=1.2をスタックに戻します。

f:id:nekosuki2017:20170221163248p:plain

これで"2 4 + 5 3 - * 9 1 + /"の答えは1.2と求まりました。
中置記法でも同じ答えになります。 (2 + 4) * (5 - 3) / (9 + 1) = 1.2

このようにして4 Level RPN電卓は式を括弧なしで計算できます。しかし、慣れが必要なのも事実です。上述のスタックの動きを理解しないと正確な計算は難しいと思われます。
ちなみに 4 Level RPNは数値の計算しかできません。変数の入った代数式などは扱えないのです。

4 Level RPN電卓の現状

2017年2月現在、4 Level RPNを搭載した電卓は未だに製造販売されています。ほとんどが金融電卓なのは 4 Level RPN が四則演算に向いているからでしょう。

  • HP 12c(金融電卓)
  • HP 12c Platinum(金融電卓)
  • HP 17bII+(金融電卓)
  • HP 35s(関数電卓)
  • HP 30b(金融電卓)→ 製造終了。在庫のみ。改造品のWP 34Sで有名。

この中で純粋なRPN電卓は HP 12c だけでそれ以外の機種はALGモードという中置記法のモードも持っています。

 

(追記)書き忘れていましたが、SwissMicrosというメーカーも4 Level RPN電卓を作っています。HP社の過去の機種のクローン電卓を作っているメーカーです。

 

次回はRPL言語について書いてみたいと思います。

  

HP 12c 金融電卓 F2230W

HP 12c 金融電卓 F2230W

 
ヒューレット・パッカード 12c Platinum ブラック 金融電卓 並行輸入品

ヒューレット・パッカード 12c Platinum ブラック 金融電卓 並行輸入品

 
hp 17bII+ 01022000100

hp 17bII+ 01022000100

 
hp 35s ハイエンド関数電卓 【並行輸入品】

hp 35s ハイエンド関数電卓 【並行輸入品】

 
ヒューレット・パッカード 30b 金融電卓 並行輸入品
 
DM15L

DM15L

 
DM16L

DM16L

 
DM41L

DM41L