掴んだ物(技術)はちゃんと食べる記録帳

興味を持ったものに対する足跡を残していくために作成しました。勉強しながら書いているので、間違いや短絡もあると思います。ご指摘いただけると喜びます。

Let's PostScript(11) [1 2 3] [1 2 3] eq はなぜfalseなのか

以前の記事

hlsme.hatenablog.com

で以下のようなことを言っていて、宿題だと書いていました。

本を見ると、eqオペレータとneオペレータは任意のObjectが比較できるようなのですが、配列でやってみたところ、うまくいきませんでした。 このあたりよくわからないので、後日の課題としたいと思います。

その時試したのが以下のScriptだったのですが、ここでfalseとなる理由がわかったような気がしますので、書き残しておこうと思います。

GS>[1 2 3] [1 2 3] eq ==
false

hlsme.hatenablog.com で自分が書いた内容を思い返すと、上記のScriptの結果がfalseとなるのは自明だなと。

GS>[1 2 3] 

まず、最初の配列の登録で、仮想メモリに対して配列の実体を格納し、OperandStackにはユニークIDをPushします。

GS<1>[1 2 3]

次に、二つ目の配列の登録で、仮想メモリに対して2つ目の配列の実体を格納します。たまたま、最初の配列と同じ内容ですが、格納される仮想メモリは別の場所です。当然、OperandStackには最初の配列とは異なるユニークIDがPushされます。

GS<2> eq ==
false

eqオペレータでOperandStackから1つ目の配列のユニークIDと2つ目のユニークIDを受け取り、その両者が一致するか比較します。 当然、両者のユニークIDは別なので、結果はfalseとなります。

ということなのかなと。とりあえず、自分の中では納得がいったのですっきりしました。