2003lk入門

トップに戻る

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


ksi.2 基礎的な命令

lexn.8 全てを[指令](cersva)に

前回の

(主処理その1)
nta 4 f5
inj iumes xx f5@
ata 4 f5
(主処理その2)
nta 4 f5
inj iumes xx f5@
ata 4 f5
(主処理その3)
kRz lesback xx

nll iumes
kRz 0 f0
kRz 0 f1
kRz 0 f2
kRz 0 f3
kRz f5@ xx

nll lesback
fen

では、処理を終わらせるためだけにlesbackという場所を末尾に定義していました。しかし、これは不格好です。

そこで、「主処理も[指令](cersva)にすればよいのではなかろうか」という考えを採用してみましょう。kRz f5@ xxと書けば[指令](cersva)を終わらせられるので、

(主処理その1)
nta 4 f5
inj iumes xx f5@
ata 4 f5
(主処理その2)
nta 4 f5
inj iumes xx f5@
ata 4 f5
(主処理その3)
kRz f5@ xx

nll iumes
kRz 0 f0
kRz 0 f1
kRz 0 f2
kRz 0 f3
kRz f5@ xx

とすれば、lesbackという名前を廃止することができます。また、主処理そのものも[指令](cersva)にするというのは、統一感が出て綺麗です。

ということで、今後書くときには、必ず主処理を[指令](cersva)にしましょう。

実は、HaskellインタプリタもWebインタプリタも、主処理が[指令](cersva)になっていることを期待している。Webインタプリタで実験している人は最後にnx has an invalid addressなどといった赤文字のエラーがこれまで出ていたと思うが、主処理の最後にkRz f5@ xxとすることでこれが取り除けて正常に終了できる。


さて、今までの[指令](cersva)では毎回同じ処理を行っていましたが、微妙に異なる動作をさせたいといったときはどうすればよいでしょうか。

例えば、前回のiumes

nll iumes
kRz 0 f0
kRz 0 f1
kRz 0 f2
kRz 0 f3
kRz f5@ xx

というものでしたが、「4つのfirjalに0を入れる」だけでなく「4つのfirjalに3を入れる」「4つのfirjalに758を入れる」「4つのfirjalの値に98423を入れる」なども同じ[指令](cersva)で行えるようにしたいとします。そのような[指令](cersva)であるvi'artesを書くにはどうすればいいでしょうか。

これに対応するためにも、f5を使います。

指令を出す側で、

nta 4 f5
inj vi'artes xx f5@
ata 4 f5

ではなく

nta 8 f5
inj vi'artes xx f5@
ata 8 f5

としてやると、f5を余計に減らしているので、余剰の領域ができます。

状態1:

f5は23980

自由 自由 自由 自由 使用中 使用中 使用中
23964番地 23968番地 23972番地 23976番地 23980番地 23988番地 23992番地
状態1の後でnta 4 f5    inj vi'artes xx f5@

f5は23976

自由 自由 自由 戻る場所 使用中 使用中 使用中
23964番地 23968番地 23972番地 23976番地 23980番地 23988番地 23992番地
状態1の後でnta 8 f5    inj vi'artes xx f5@

f5は23972

自由 自由 戻る場所 余剰領域 使用中 使用中 使用中
23964番地 23968番地 23972番地 23976番地 23980番地 23988番地 23992番地

そこで、

nta 4 f5
kRz 98423 f5@
nta 4 f5
inj vi'artes xx f5@
ata 8 f5

とすると、この余剰領域を通じて[指令](cersva)を受け取る側に情報を送ることができます。

受け取る方では、

nll vi'artes
kRz f5  f3 
ata  4  f3 
kRz f3@ f0
kRz f0  f1
kRz f0  f2
kRz f0  f3
kRz f5@ xx

としてやることで目的を達成できるのです。

この小技により、[指令](cersva)の応用範囲はさらに広まるのです。


前のページへ   トップへ