RPN (Reverse Polish Notation) またはIPN (Inverse Polish Notation)


RPNとは『逆ポーランド記法』と呼ばれる数式の記述法です。別にポーランド人が普通と逆という意味ではありません。

数式といえば、学校で習った記述法 ( 1 + 2 = 3 ) を思い浮かべますが、ポーランド人の論理学者ヤン・ウカシェーヴィッチ (Jan Lukasiewicz) は、独自の記述法を考案しました。これを通称『ポーランド記法』と呼んでいるのですが、RPN というのはその『ポーランド記法』と演算子の位置が”逆”という意味です。

それぞれの記述法を挙げてみます。たとえば1に2を足す、という計算では、

■学校で教わる通常の記法では、「 1 + 2 」 のように、演算記号(+)を数値の間に書きます。

■『ポーランド記法』では、演算記号を数値の前に書きます。つまり、 「 + 1 2 」。

■『逆ポーランド記法(RPN)』では、演算記号を数値の後ろに書きます。つまり、「 1 2 + 」。

初めて目にした人は、奇妙でややこしい、と感じるでしょうが、では次の計算はどうでしょうか?

(1 + 2) x (3 + 4) ・・・【式1】

見慣れたこの式を RPN で記述すると

1 2 + 3 4 + x ・・・【式2】

となります。カッコが消えています

【式1】を計算するとき、頭の中では「1に2を足して、3に4を足したものを掛ける」と解釈します。
【式2】は、それを日本語どおりにそのまま記述していることに気がついていただけましたか? RPN が「日本語記法」とも呼ばれる由縁です。

もうひとつ、こんな計算はどうですか?

(23 -7) ÷( (18 - 11) x 9 )

これは RPN ではこう記述します

23 7 - 18 11 - 9 x ÷

23から7を引いて、18から11を引いて9を掛けた結果で割る」という式の解釈そのままの記述です。一般記法でカッコが何重だろうが、RPNではカッコは出てきません

RPN の利点は、式の解釈、つまり何をどうしたいかをそのまま記述できる点にあります。『ポーランド記法』は「カッコを使わず、何をしたいかを明確に記述する」ために考案されました。『逆ポーランド記法』はそれを計算機に応用するために考案された記法です。

HP電卓ではそれをそのまま計算機で実現しているので、「何をどうしたいか」がわかれば、あとはそのままキーインすればよいのです。回路設計などで”あーでもない、こーでもない”と試行錯誤を繰り返しながら計算するときは、思ったことをいちいち数式に変換する必要が無く考えたままをキーインすればよいので、特にその恩恵に浴します。それが無意識でできるようになってしまうと、普通の電卓が使えなくなってしまいます。

HP電卓に慣れてしまうと、「1に2を足して、3に4を足したものを掛ける」という自然な思考を通常の計算式で表現するために、数式のルールに則って「カッコ」を引っ張り出してくることに違和感を感じるようになります。上記のような簡単な計算ならどうでもよいような話ですが、複雑な計算になったとき、ピタゴラスを使っていた頃は、横に紙を置いてメモをしたり、計算の途中経過をやたらとメモリーに入れまくっていた記憶があります。HP電卓を使っているときは、そういうことはほとんどありません。

先程の【式2】を実際にHP電卓で計算するには

keykeykeykeykeykeykeykeykey

とキーインします。key キーはふたつの数値を区切るためのキーです。代りといってはナンですが、RPN方式のHP電卓には「=(イコール)」キーがありません。

keykeykey

までキーインすると、中間結果の「3」が表示されます。それをメモリーに待避させたりせずそのまま続けて

keykeykeykey

とキーインしても、先程の中間結果「3」は内部スタックに保持されています。なので、今の計算結果の「7」が表示されたところで key キーを押せば、先程の「3」と今の「7」が掛けられて「21」と表示されます。これが、カッコが要らない秘密?なのです。

ちなみにRPNは「日本語記法」とも呼ばれています。つまり【式2】は「1に2を足して、3に4を足したものを掛ける」という日本語の文章そのままを表記しているわけです。だから我々が【式1】を見てまず日本語に直し、それを今度は電卓の仕様に合わせてどうキーインするかを考える手間がありません。【式1】を普通の電卓で計算するには、「1 + 2」を計算し、「M+」でメモリーに入れ、「3 + 4」を計算し、「X」を押してから「MR」で呼び出し、「=」でしょうか? 繰り返しますが、単純な計算では負担にならなくても、ちょっと込み入ったことをやろうとするとやはりややこしいことになります。

込み入っているかどうかはわかりませんが、電気回路ではしょっちゅうお世話になるこの例はどうでしょうか?

2Ωと3Ωの並列抵抗値を求める 式はformですね。逆数の和の逆数となります。

HP電卓で計算すると、

keykeykeykeykeykey

です。たったキー6個。
「2の逆数と3の逆数を足したものの逆数」という日本語そのままをキーインすればよいわけです。

■周波数特性を表わす式、form もよく使います。「2とπとCとRを掛けた逆数」ですね。

keykeykeyCkeyRkeykey
(2にπを掛けてCを掛けてRを掛けたものの逆数)

でもいいし、

keykeykeykeykeyCkeyRkeykey
(1を、2にπを掛けてCを掛けてRを掛けたもので割る)

とキーインしても同じです(CとRには実際の容量値と抵抗値が入ります)。

普通の数式と違って、RPN は”計算の仕方”を記述するので何通りにも記述できるわけです。

RPN という記法の魅力(?)を、いささかでも感じられたでしょうか? 

さて、HP電卓は RPN を実現するために内部で「スタック」を使っています。「スタック」を理解しなくてもHP電卓は使えますが、理解しているとより使いこなせるようになります。では「スタック」とはなにか、見てみましょう。


このページのトップへ 扉へ 「スタック」とは