1980年台の終わり頃、筆者はHP-28Sという電卓を購入した。それまでずっと、HP-19Cという機種を使っていた。しかし、LSI技術の進歩で、関数電卓やプログラム電卓は、小さく、薄くなり、電池も長持ちするようになった。やむなく、国産の電卓を使うなどしていたが、久々にHPの電卓売り場(たぶん紀伊國屋書店)に行ったとき、手帳型のこの機種を見つけて、購入することにした。購入時には、簡単な日本語ガイドと、英語のマニュアルが付属しており、日本語マニュアルは、後から別に販売されたと記憶する。
・HP-28 シリーズ - Wikipedia
・HP-19C/-29C - Wikipedia
HP-28Sは、縦長のクラムシェル型なのだが、液晶のある本体は右側、アルファベットキーが左側にある「左開き」になっている。後年、国内で販売された見開き型の電子手帳では、左側に液晶、右側にアルファベットキーのある「右開き」だった。HP-28Sの表示装置は、ドットマトリックス液晶で、23文字×4行(137ドット×32ドット)の解像度を持つ。
それまで使っていたHP-19Cは、7セグメントLEDが1行のみであったことに比べると格段の進歩である。アルファベットが表示されるようになったため、16進数も扱えるようになった。
メモリは32キロバイト、クロック周波数は1 MHz(HPのSaturnコア)と、計算速度も格段に速くなった。大学時代、階乗計算を行うプログラムを作って比較したらHP-19Cは、カシオのFX-502Pよりもかなり遅かった。
HP-28Sは、通常の電卓として使う分には、従来の計算方式であるRPN(Reverse Polish Notation)のやりかたでそのまま利用できた。しかし、プログラムやユーザーから見える内部構成は大きく異なっていた。この電卓は、RPL(Reverse Polish Lisp)という言語(System RPL)で記述されていて、プログラミングもRPL(User RPL)で行う。RPLは、スタック言語であるFORTHやリスト処理のLispなど、リソース消費の少ない言語をベースに作られた。従来のRPNはキープログラミングに制御ステートメント(条件判断やGOTO、ループなど)を追加したもの。これに対してRPLは、ブロックの定義やローカル変数の定義も行える本格的な言語である。スタックはメモリがある限り、何段でも利用できる。RPNは4段の固定スタックだったが、実際の計算で困ったことはない。しかし、プログラムを組むときには、スタックの状態を常に考える必要があった。レジスタ(電卓でいうメモリ)に入れた数値は、スタックに読み出さないと関数などを適用できないため、必要なパラメータをすべてスタック上において、あとは演算やスタック操作を使うようにすることでプログラムを短くできた。RPLでは、スタックの上限を気にする必要がなくなった。
もともとRPLは、数式処理やグラフ表示などの高度な機能を持つ電卓を記述する言語として作られた。これをSystem RPLという。本格的な言語としての記述力があるため、数式処理やベクトル、行列演算、関数定義からのグラフ描画といった高度な機能が可能になった。
1987年のHP-28Cという機種ではじめて、プログラミング言語としてUser RPLが搭載された。System RPLは、コマンドの実行時にパラメーターのチェックを行わない。このため、演算対象が存在しない、あるいは型が異なるなどが原因でシステムは停止してしまう。これは、実行速度を確保するためには必要なことだった。これに対してUser RPLは、実行前に対象のチェックを行い、適切なエラー表示などを行う。このため、実行でシステムが停止してしまうことはないが、その分、実行速度が遅くなる。
筆者の購入したHP-28Sは、このHP-28Cの後継機種である。気に入った機能の1つに単位換算機能がある。複雑な単位の換算やSI接頭辞の処理が可能だった。メートルにSI接頭辞のギガを付けて「Gm」として単位の換算、「1ギガメートルは何メガメートルか」を計算させることが可能だ。
さらには、ユーザーが単位を定義し、これを使った単位の変換も可能になっていた。たとえば、「byte」という単位と「Kbyte」というユーザー定義単位は
変数 byte = { 1 "1"}
変数 Kbyte = {1024 "byte"}
と、変数名を定義したい単位名にして、リストで換算値と単位を入れておく。変数Kbyteの内容は、1024 byteであることを表す。byteのリストの"1"は、物理次元のない単位を表す。この2つが定義できると、5 Kbyteは、何byteなのかを計算させることができる。このまま、「Mbyte」には{1024 "Kbyte"}と、次々と定義していくことで、単位間の換算が行えるユーザー定義単位を作っていける。小数点を使った0.5メガバイトなどの表記を整数表記に直すのに単位換算は筆者に取って当時、必須の計算だった。
このRPL方式は、後継機種となるHP-48、HP-49系に引き継がれさらに強化される。HP-48系では、単位の換算だけでなく、次元が同じ異なる単位(たとえばマイルとフィートなど)の間での演算が可能になった。たとえば「1フィートと3インチを足す」ことができる。単位はアンダーバーを前置することで表記でき、キー入力が簡単になった。3メートルなら「3_m」と表記でき、シングルクオートで括る必要がない。
前述の例は、
変数 byte = 1
変数 Kbyte = 1024_byte
となる。しかし、このRPLは、HP-49系を最後に製品が登場していない。HP社は電卓部門を廃止し、サードパーティで製造を行っていたが、最近ではブランド貸しなどで、かろうじてHPブランドの電卓が市場に残るのみである。
今回のタイトルネタは、1970年の英国TVドラマ「UFO」(邦題謎の円盤UFO)のエピソード「Computer Affair」である。UFOの攻撃に失敗した要撃機インターセプター 3機は、衝突回避のためのコース変更をオペレーターに要求する。しかし、そのうち1機は、変更が間に合わずUFOに攻撃されてしまう。コンピュータの指示に間違いがあったのか? 人間のミスなのか? さらにオペレーターと、生き残ったパイロットの間に親密な関係があったことが判明。状況は複雑になるが、組織として問題を解明する必要があった。
