逆ポーランド記法(RPN) その1

Hewlett-Packard社の関数電卓は、RPN(Reverse Polish Notation:逆ポーランド記法)と呼ばれる入力方式が特徴的です。
このRPNは、演算子(+や-の記号)を被演算子(数字や変数)の後に記述します。
それとは違い、SharpやCASIO、TIなどの電卓では最近「自然表記」という仕様になっています。

ここでは、RPNに興味を持たれた方への簡単な説明をしたいと思います。

「逆ポーランド記法」があるのですから、逆ではない「ポーランド記法」というのも存在します。

 

○ ポーランド記法(Polish Notation)

演算子を被演算子の前に記述する表記法です。
例えば、「3と4を加算する」という計算は、一般的には「3+4」と書きます。
ポーランド記法では、

+ \hspace{10pt} 3 \hspace{10pt} 4

と表記します。

この書き方は、C言語使いの方などには親しみやすい形といえるでしょう。
なぜなら、演算子を「関数」とみなして、被演算子を「引数」とみなすことが出来るからです。

つまり、上式(一般的な表記で3+4)は、「+」という加算をする関数の引数が「3と4」であると解釈できるからです。

ポーランド記法は、有名なところでは「Lisp (List Processing)」というプログラミング言語で使われており、テキストエディタにEmacsを使われている方には馴染み深い書き方だと思います(Lispに関してはコブタイカも興味がありますので、時間があれば書いてみたいと思いますw)。

 

○ 逆ポーランド記法(Reverse Polish Notation, RPN)

冒頭にも書きましたが、演算子(+や-の記号)を被演算子(数字や変数)の後に記述する表記法です。
例えば逆ポーランド記法では、「3と4を加算する」という計算は、

 3 \hspace{10pt} 4 \hspace{10pt} +

と表記します。

HPの電卓では、この逆ポーランド記法(以下、RPNと書きます)での入力が一般的です。

RPN方式の電卓では、計算式の「解釈」が必要で、頭の体操にもなると思いますww。また、RPNはその解釈が「日本語」の構造に似ていると思います。
例えば先程の「3+4」という計算ですが、日本語では「3と4を足し算したら?」と、まさにRPNでの解釈の仕方と同じであると考えて差し支えないでしょう。

RPN_hp35キーボード

写真1 HP 35sキーボード

そんなRPNですが、では実際にHPの電卓ではどのように計算を行うのでしょうか。写真1は、現在市販されているHP 35sという関数電卓のキーボード部分です。
これを良く見ていただきたいのですが、SharpやCanon、TIの電卓にある「=(イコール)」キーがありません。

同僚や友達などに借りて初めてHPの電卓を触った方は、 どのように計算すればいいのか戸惑うのも無理ありませんよねw。ブログでも紹介しましたが、RPN電卓はアニメの世界でも 紹介され、それを知らない人にとっては驚きの電卓として扱われていますwww。

RPNのHP電卓を使うに当たり、もう一つ特徴的で覚えなければならないことがあります。

それは、「スタック」や「レジスタ」という考えです。

写真2は、HP 35sの液晶画面です。
HP 35sは、「RPNモード」と「ALGモード」の2つの計算モードを選択することが出来、「RPNモードのときは写真2のように2段の表示になります。

RPN_hp35液晶画面

写真2 HP 35s画面

下の段が「Xレジスタ」上の段が「Yレジスタ」を表しています。

● レジスタ

では、レジスタとは一体なんでしょうか?
簡単に言うと「演算のための一時的なメモリ」のことです。例えば、HP 35sは4段(個)あります。
下の図は、HP 35sのレジスタを示したものです。
X、Y、ZおよびT(Top)レジスタとそれぞれ呼びます。

RPN_hp35レジスタ

図1 HP 35sレジスタ

4段のレジスタには、それぞれPart1、Part2およびPart3という更に3つのメモリがあります。
・Part1は、実数や1次元ベクトルの値
・Part2は、複素数と2次元ベクトルの値
・Part3は、3次元ベクトル
の計算で利用されます。

レジスタが4段までしかないのは、どこかで記事を読みましたが、通常の計算では4段以上のレジスタは必要ないだからだそうです。

このレジスタは、[ENTER]キーを押すごとに下から(Xレジスタ)順にY、Z、Tとスタックされていきます。
または、計算結果が同様に下から順にスタックされていきます。

● レジスタの操作

HP電卓では、レジスタの概念と操作を習得することが、より効率的に正しく計算を行う秘訣となります。
単純な実数計算では、XとYのレジスタ間で計算を行うことになります。そして、最終的な計算結果はXレジスタに格納されます。

[Xレジスタのクリア]

RPN_hp35_RSRPN_hp35_CLEAR を押します。以下の画面に変わります。

RPN_hp35_CLEAR_画面

RPN_hp35_1 を押してXレジスタをクリアします。

[スタックの閲覧]

レジスタにスタックされた数値は、以下の操作により閲覧することが出来ます。
表示はXおよびYレジスタなので、その内容を理解しておかないといけませんねw。

・ロールダウン

RPN_hp35_RollUpDown スタックを下向きに移動し内容を閲覧します。

RPN_hp35_スタック閲覧

RPN_hp35_RollUpDownを押す毎に、スタックは上図のように移動します。ただし、HP 35sで液晶に表示されるのはXとYレジスタになります。

・ロールアップ

RPN_hp35_RSRPN_hp35_RollUpDownを毎回押すことにより、スタックを上向きに移動し内容を閲覧します。

RPN_hp35_スタック閲覧UP

RPN_hp35_RSRPN_hp35_RollUpDownを押す毎に、スタックは上図のように移動します。ただし、HP 35sで液晶に表示されるのはXとYレジスタになります。

[スタックの交換]

RPN_hp35_Change キーは、XレジスタとYレジスタの内容を交換します。

この操作は、割り算などをするときに分子と分母を入れ替える・・・といったときに良く使います。

まずは基本的なレジスタの操作を説明しました。
単純な計算だけでなく、RPN電卓でプログラミングを組む場合にもスタックやレジスタの考えは大切です。是非覚えてRPN電卓の使い手になってくださいね。

さて、次はさらに突っ込んだレジスタの話と、実際の計算を行ってみましょうかねw。