2003lk入門

トップに戻る

をクリックすると非真理設定が非表示になります。ページを再読み込みすると戻ります。


ksi.2 基礎的な命令

lexn.6 二重移動命令inj

f0に入っている値をf1に移し、f1に元々入っていた値はf2に移す、といった処理はどうやって書けばいいでしょうか?

簡単ですね。次のように書けばいいのです。

kRz f1 f2
kRz f0 f1

これを一つの命令にまとめた、injという命令があります。名称は[同時に移す](irzarst ileceonj)を略したもので、2回のkRzを同時に行うことができます。

inj f0 f1 f2

これが特に便利なのは、値を交換したいときです。例えば、f0に入っている値とf1@に入っている値を交換したいとき、次のようには書けません。

kRz f0 f1@
kRz f1@ f0

順番を入れ替えて

kRz f0 f1@
kRz f1@ f0

としても、上手くいかないことに変わりはありません。

ということで、この場合はinjの「同時に移す」という性質を使って、

inj f0 f1@ f0

と書くことで正しく交換できます。

  1. 第二オペランドの値を一時保管する
  2. 第一オペランドの値を第二オペランドに入れる
  3. 一時保管した値を第三オペランドに入れる
という操作をこの順に行う行為と等価であることが保証されている。

なお、余談ですが、injが要求する3要素のうち2番目に[メモ](firjal)を使っていて、かつ3番目が[住所箱](setistafar)であるとき、2番目で使っている[メモ](firjal)を住所箱の番地を指すためにも使うと不具合を起こすことがあります。気をつけましょう。例えば、

inj f0@ f0 f0@

は2003lkとしては正しくなくて、f0f0@を交換したい場合は

inj f0 f0@ f0

と記載する必要があります。


前のページへ   次のページへ