スタック操作子

スタックに積まれたアイテムを操作するための基本的なワードのスタック効果コメントを表に示します(記号法は規格通りではありませんが)。すべて、整数スタックに関するものです。
操作子 スタック効果コメント
DUP ( x -- x x )
DROP ( x -- )
SWAP ( x1 x2 -- x2 x1 )
OVER ( x1 x2 -- x1 x2 x1 )
ROT ( x1 x2 x3 -- x2 x3 x1 )
2DUP ( x1 x2 -- x1 x2 x1 x2 )
2DROP ( x1 x2 -- )
2SWAP ( x1 x2 x3 x4 -- x3 x4 x1 x2 )
2OVER ( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 )
PICK ( x0 ... xu u -- x0 ... xu x0 )
ROLL ( x0 x1 ... xu u -- x1 ... xu x0 )
NIP ( x1 x2 -- x2 )
TUCK ( x1 x2 -- x2 x1 x2 )
-ROT ( x1 x2 x3 -- x3 x1 x2 )
スタックに一時にあまりに多くのアイテムを積み込むことは、コードの可読性の側面、実行効率の側面、コーディングミス回避の側面から、禁忌とされています。その反映として"PICK"や"ROLL"といった、スタックの深い位置を操作できる操作子ワードも避けるべきであるといわれることがあります。なお、"ROLL"はPowerMops以前では定義されていません。また、"2OVER"も、Mopsではデフォルトでは定義されていません。後者はファイルdoubleをロードすることで定義されます。なおiMopsでは、すべて定義されていますが、利用原則は同じです。

なお、PICKとROLLには、巡回アイテムの個数を指定する数値が一つトップに必要になりますが、影響を受けるスタック値の個数より一つ少ないことに注意しましょう。この意味は、動かそうとする値に至るまで飛ばすアイテムの個数、ということです。例えば、上のPICKのuが8であるとすると、この8をまず消費し、次から、8個のアイテムを飛ばして、9個目のアイテムをコピーし、トップに置くということです。


関連項目:






最終更新:2019年03月18日 21:06