RPNでゲームを作ろう(その5)

前回(1月31日)の続きです。

今日は、プレイヤーに入力してもらう部分を作りましょう。

と思ったのですが、その前に、1月30日に出てきた「スタック」について説明する必要がありましたね。今回は、それでいきましょう。

HP 35sでは、AやBといった変数に値を代入することができますが、C = A + Bというような、変数同士の計算を行うことはできません。+や×といった演算子は、「計算のための数値おきば」である「スタック」に対して行われ、計算の結果もスタックに入ります。(実は、数式処理(EQN)の機能を使えば、変数同士の計算もできるのですが、今回は使用しません。それに、この機能はRPNではありませんので、便利ですが、まあ、普通です。)

ネットにはコンピュータに詳しい方が沢山いらっしゃるので、私なんかが説明するのは大変おこがましいのですが(私はコンピュータの専門ではないです)スタックとは、数値の書き込みと、取り出しができる入れ物のようなものです。数字は一列に並んでいて、最後に書き込んだ数値が、最初に出てきます。Last In, First Outで、LIFOモリーとも呼ばれるようです。つまり、1枚のメモ用紙に数値を1個だけ書いて、一番上に置くこと、および、一番上のメモ用紙を取って数字を読むことができるような、メモ用紙の山のようなものです。このイメージで、スタックに数値を入れることを「積む」と言ったりします。

35sでは、数字を入力すると、勝手にスタックに積まれます。たとえば、

(2 + 4) × (3 + 5)

という計算を、スタックを使ってRPNでやってみましょう。RPNでは、普通の電卓で「2 + 4 =」と打つ代わりに、

2 ENTER 4 +

と操作することは、以前書きました。これをそのまま続けて、手順としては、

2 ENTER 4 + 3 ENTER 5 + ×

と操作すると、上記の計算ができます。なお、演算子の前には、ENTERはいりません。これは、「2と4を足したものと、3と5を足したものを、かける」という日本語の順序と同じなので、この程度なら、特にスタックを意識しなくても計算できます。しかし、実際には、この計算の過程で、数字はスタックに積まれたり、スタックから出てきたりしています。この様子を見てみましょう。

入力 → スタックの中身(左が最新)

2 ENTER → 2
4 → 4 2
+ → 6
3 ENTER → 3 6
5 → 5 3 6
+ → 8 6
× → 48

と、こんな感じになります。

もう一つの例として、「1 + 2 + 3 + 4 =」をやってみます。以下のやり方では、スタックの動きを見るために、あえて先に数字だけ入力して、後から演算子を入力しています。キーの操作としては、

1 ENTER 2 ENTER 3 ENTER 4 + + +

となります。このとき、スタックは、

入力 → スタックの中身(左が最新)

1 ENTER → 1
2 ENTER → 2 1
3 ENTER → 3 2 1
4 → 4 3 2 1
+ → 7 2 1
+ → 9 1
+ → 10

という感じになります。イメージがわきましたでしょうか。

スタックの説明はこのぐらいにして、次回(こそ)は、プレイヤーに入力してもらう部分を作りたいと思います。