逆ポーランド記法では、例えば4 + 5 * 6 + 7は4 5 6 * + 7 +と書きます。
ぱっと見「うわっ!なんじゃこりゃ」となりますが、このほうがシンプルです。
今:[]
まず、4と書いてあるので4と書いた積み木を置きます。
今:[4]
次は5なので、5と書かれた積み木を上に乗せます。「スタック」してますね!
今:[4, 5]
そして6なので、6を書いた積み木を上に乗せます。
今:[4, 5, 6]
次は数字ではなく「」(×)が出てきました。掛け算は2つの引数を取るので、上2つの積み木を消し、それらの積み木に書いてある数「5」と「6」を掛けた値=30を書いた積み木を乗せます。
今:[4, 30]
次は「+」なので、「」と同様に、上2つを消し、それらを足した値=34と書かれた積み木を置きます。
今:[34]
次に、7なので7と書かれた積み木を乗せます。
今:[34, 7]
最後に、「+」と書かれているので、上2つの積み木を消し、足した結果=41が書かれた積み木を置きます。
今:[41]
残ったのは41と書かれた積み木です。シンプルでしょ!
この書き方が逆ポーランド記法、積み木を置くためのところがスタックです。
スタックには、このような計算をする以外にも、変数やリターンアドレス、呼んだ関数の呼び出し時点のベースポインタを置きます。
スタックでは「置く/乗せる」をプッシュ、「消す」をポップといいます。
書いていて世界は逆ポーランド記法で回ればいいのに!と思ってきました。Schemeが好きになってきました。ぜひ逆ポーランド記法を普段使いしてみてください!()
最後まで読んでいただき、ありがとうございました。