以下の記述は間違っている. 修正した内容は HP-42S: スタック (修正版) を参照のこと.
HP-42S という電卓は, あらゆる計算をスタックを利用した逆ポーランド記法による操作によって行なう.
だから, スタック構造を理解することは HP-42S によるプログラミングを修得するために避けて通れない一歩だ.
ずっとスタックという構造とそれによるデータの取り扱いがわからないでいる.
教科書などに出てくる, スタックのデータを積む都度に伸びていく縦に積み上がった矩形の箱のイメージを頭の中に描くことがとても難しい.
伸びたり縮んだりして動く, その動きに頭が追いつかない.
以前にも書いたが, 何らかの概念を幾何学的なイメージ (例えば「図」)として把握して考える能力がどこか失われている, もしくは著しく低下している.
HP-42S のマニュアルのスタックの説明を読み返し, 寝込んでいるときに考えたりしていたら今日, 一つ前に進めた気がした.
つまりこうである.
12 + 7 を計算するとき, HP-42S では次のような操作を行う.
12 ENTER 7 +
ここで,
12
, 7
は数字ボタンを使って入力する. ENTER
は "Enter" ボタンを押すことを意味する. +
は "+" ボタンを押すことを意味する.このとき HP-42S はスタック X, Y, Z, T (下から順) を使って次の処理を行う.
(0) 最初のスタックの内容が次のようになっていると仮定する (任意でよい).
T: 8128
Z: 496
Y: 28
X: 6
(1) "12" が入力された時点で X レジスター (スタックの最下段) の内容が 12 となる.
T: 8128
Z: 496
Y: 28
X: 12
(2) ENTER が押されると X レジスターの内容 12 が Y レジスター (X レジスターの 1 つ上のレジスター) の内容にコピーされる. このときのスタックの内容は以下の通り.
T: 496
Z: 28
Y: 12
X: 12
T レジスターの元の内容 8128 が Z レジスターの内容 496 に新たに書き換えられて失われ, Z レジスターの元の内容 496 が T レジスターにコピーされた後に Y レジスターの元の内容 28 に書き換えられ, Y レジスターの元の内容 28 が Z レジスターにコピーされた後に X レジスターの元の内容 12 に書き換えられる, というのがスタックに対して実際に行われた操作である.
(3) "7" を入力した時点で X レジスターの内容が 7 に書き換えられる. このときのスタックの内容は以下の通り.
T: 496
Z: 28
Y: 12
X: 7
(4) + が押されると Y レジスターの内容 12 が X レジスターの内容 7 に加算されて, 結果の 19 が X レジスターの内容になる. このときのスタックの内容は以下の通り.
T: 496
Z: 496
Y: 28
X: 19
Y レジスターの内容 12 が X レジスターの内容に加算された後に Z レジスターの元の内容 28 が Y レジスターの内容にコピーされる. その後, T レジスターの内容 496 が Z レジスターの内容にコピーされる, というのがスタック全体に対して行われた操作.
(2) の像が頭の中に描けたとき, 目の前が大きく広がった気がした.
もしかしたらまだ誤った理解があるかも知れない.
しかし, スタックを理解できるかも, と漸く思えた. 嬉しい.