計算してみる



 
 逆ポーランド記法の計算をするときには、
 
 1・演算子がくるまで数字を式から手元に持ってくる
 2・演算子がきたら、最後に持ってきた数字とその前の数字とでその計算をする
 3・計算結果は新しい数字として手元にもってくる。
 
 例を見てみましょう
 
  5 + 4 - 3 を 書き換えた  5 4 3 - +
 
 という式では
 
手元     数式   コメント
            5 4 3 - +  ;	スタート
5           4 3 - +    ;	最初の数字'5'
5 4         3 - +      ;	次の数字'4'
5 4 3       - +        ;	次の数字'3'
5 4 3 -     +          ;	計算記号が来た!
5 1         +          ;	4と3を足して7
5 1 +                  ;	計算記号が来た!
6                      ;	計算結果
6                      ;	もう持ってくるものがないので終わり



  (1 + 4) * (3 + 7) / 5 を書き換えた 1 4 + 3 7 + 5 / * だと、

            1 4 + 3 7 + * 5 /
1           4 + 3 7 + * 5 /
1 4         + 3 7 + * 5 /
1 4 +       3 7 + * 5 /
5           3 7 + * 5 /
5 3         7 + * 5 /
5 3 7       + * 5 /
5 3 7 +     * 5 /
5 10        * 5 /
5 10 *      5 /
50          5 /
50 5        /
50 5 /
10

ちなみにもう一つの 1 4 + 3 7 + * 5 / では


            1 4 + 3 7 + 5 / *
1           4 + 3 7 + 5 / *
1 4         + 3 7 + 5 / *
1 4 +       3 7 + 5 / *
5           3 7 + 5 / *
5 3         7 + 5 / *
5 3 7       + 5 / *
5 3 7 +     5 / *
5 10        5 / *
5 10 5      / *
5 10 5 /    *
5 2         *
5 2 *
10

 
 となります。分かりましたでしょうか?
 
 この計算経過の表を見てみると、手元では数字が左から右に詰まれていって、計算記号がくると計算結果が新たに入っています。
 数式では、式の左側から1文字ずつ無くなっています。
 
 カンの良い方ならもうお気づきかもしれませんが、これらの動作は
 
 手元 → スタック(LIFO)
 数式 → ポインタと文字列(FIFO)
 
 に置き換えることができます。この逆ポーランド記法ならば、なんとなく数式の処理ができそうな気がしませんか?
 
矢印前ページ トップ
次ページ矢印