見出し画像

20010909 逆ポーランド記法

 昨日の電卓の続き$${^{*1}}$$。この電卓$${^{*2}}$$の計算式の入力は「逆ポーランド記法$${^{*3}}$$」と呼ばれる方法で行う。

 どう言う方法かというと普通の電卓では「$${1}$$」「$${+}$$」「$${1}$$」「$${=}$$」と言う順番でボタンを押して計算するが、この計算機では「$${1}$$」「$${ENTER}$$」「$${1}$$」「$${+}$$」と押すと答えが出てくる。電卓の写真$${^{*4}}$$を見ると判るが、「$${=}$$」のボタンがなく、その代わり真ん中に縦長の「$${ENTER}$$」というボタンがある。「$${ENTER}$$」と「$${=}$$」とでは機能が全く違うので「その代わり」という表現はおかしいが、「$${1+1=}$$」の場合、操作の手間としては同じなのでそう書いた。更によく見ると「$${(}$$」「$${)}$$」のボタンがない。逆ポーランド記法では括弧を使わずに数式を表記することが出来る。

 例えば「$${(1+2)*3}$$」は逆ポーランド$${^{*5}}$$では「$${1 \space 2 + 3 \space *}$$」である。電卓では「$${1}$$」「$${ENTER}$$」「$${2}$$」「$${+}$$」「$${3}$$」「$${*}$$」と押す。普通の電卓なら「$${(}$$」「$${1}$$」「$${+}$$」「$${2}$$」「$${)}$$」「$${*}$$」「$${3}$$」「$${=}$$」だから、ボタンを押す手間としては逆ポーランドの方が少ない。慣れるまで少し時間がかかるが、慣れてしまえば使いやすいので、たまに普通の電卓を使う時は「$${ENTER}$$」のボタンがないので戸惑う時がある。

 ところで逆ポーランドがあるならば「正ポーランド」があるはずである。わざわざ「正」を付けたりはしないが、「ポーランド記法$${^{*6}}$$」という方法が最初に考案された。「$${(1+2)*3}$$」は「$${* + 1 \space 2 \space 3}$$」となる。考え出したのはポーランドの論理学者Jan Lukasiewicz$${^{*7}}$$である。インドヨーロッパ語$${^{*8}}$$では大抵は動詞の後に目的語が配置されるので、ポーランド記法のようにいわば動詞である演算子が前に来るのは普通なのかも知れない。こう考えると逆ポーランドは日本語や韓国語$${^{*9}}$$に似た表記法である。「$${1 \space 2 + 3 \space *}$$」は「$${1}$$と$${2}$$を足して$${3}$$を掛ける」と日本語の語順通りに解することが出来る。

 西洋語に近いポーランドではなく、逆ポーランドが電卓に取り入れられたのはコンピュータの動作に非常に適合していることが判ってきたからである。「逆ポーランド記法」という名前はヒューレット・パッカード社がJan Lukasiewiczに敬意を表して名付けた$${^{*10}}$$らしい。

 演算は二つの数の間で行われる。「$${1+2+3+4}$$」は一度に計算されるのではなく、

$${ \space \space \space \space 1+2+3+4}$$
$${=3 \space \space \space \space \space \space \space +3+4}$$
$${=6 \space \space \space \space \space \space \space \space \space \space \space \space \space \space +4}$$
$${=10}$$

と言った具合である。これは人間でもコンピュータでも同じだろう。括弧があればそれを先に計算していく。括弧がなければ累乗、掛け算割り算、足し算引き算の順番で計算していく。この文法を知らないと計算が正確に出来ない。

 ポーランド記法ではこの文法に関係なく計算していくことが出来る。逆ポーランドでも同じである。例えば「$${(2^3+(4-5)*6)/8}$$」はポーランドならば「$${/ \space + \space}$$ $${^}$$ $${2 \space 3 \space * \space - \space 4 \space 5 \space 6 \space 8}$$」で逆ポーランドならば「$${2 \space 3 \space}$$ $${^}$$ $${4 \space 5 \space - \space 6 \space * \space + \space 8 \space /}$$」である。「^」は累乗を表す演算子で、「$${2}$$ ^ $${3}$$」は「$${2}$$の$${3}$$乗$${(=8)}$$」という意味である。

$${ \space \space \space \space \space / \space +}$$ ^ $${2 \space 3 \space * \space - \space 4 \space 5 \space 6 \space 8}$$
$${= \space / \space + \space 8 \space \space \space \space \space * \space - \space 4 \space 5 \space 6 \space 8}$$
$${= \space / \space + \space 8 \space \space \space \space \space * \space (-)1 \space \space 6 \space 8}$$ ※$${(-)}$$は演算子ではなく符号を表す
$${= \space / \space + \space 8 \space \space \space \space \space (-)6 \space \space \space \space \space \space \space \space \space \space 8}$$
$${= \space / \space 2 \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space 8}$$
$${= 0.25}$$

 二つの数が隣り合っている場合、その直前の演算子で演算をするという操作を繰り返しているだけである。このように演算子の優先順位を考えずに機械的に計算を進めることが出来る。

 それにしても何故「ポーランド」なのだろう。考案者のLukasiewiczの名前に因んで「Lukasiewicz記法」とするのが普通ではないだろうか。読み方が難しいからかもしれない。「ルカシェービッチ」なのか「ウカシェーヴィッチ」と読むかどうか判らないが、とにかく字面を見て直ぐには読み方がわからない。ポーランドの学者だからといって「ポーランド記法」というのは何となく釈然としない。仮に日本の東四柳$${^{*11}}$$(Higashiyotsuyanagi)という数学者が考案すれば、「ジャパン記法」になってしまうことになる。

 地名と言えばモンテカルロ法$${^{*12}}$$というのがあるのを思い出した。

*1 20010908 HPの電卓
*2 HP-15C
*3 逆ポーランド記法のまとめ [基礎] | 逆ポーランド電卓の実践ウェブ rpn hacks!
*4 HP-15C
*5 RPN(Reverse Polish Notation)またはIPN(Inverse Polish Notation)
*6 ポーランド記法
*7 Lukasiewicz
*8 インド・ヨーロッパ語族
*9 韓国語・入門の入門
*10 PRN
*11 能登スタイル/のとびと:東四柳 史明さん(穴水町)
*12 モンテカルロ法のお話

この記事が気に入ったらサポートをしてみませんか?