2003lk入門

トップに戻る

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


ksi.2 基礎的な命令

lexn.4 kRz命令の別用途

ここまで、kRzatantaと3種類の命令を学んできましたが、この3つの命令では今のところ数を複製したり足したりすることしかできません。また、足し算を何千回も繰り返すには、足し算命令を何千回を書くしかなさそうです。

…本当にそうでしょうか?なにか見落としはないでしょうか?もう一度2003fの基本動作を見ていきましょう。

  1. xxが次の命令を指すようにする
  2. nxの指す命令を実行する
  3. xxの指す命令をnxも指すようにする

ここで、「2. nxの指す命令を実行する」ことによってxxの値を上書きしたらどうなるでしょうか?「3. xxの指す命令をnxも指すようにする」によりその値がnxに伝播し、次の「1.」で新nxの次をxxが指すようになります。そうして新nxの指す命令が実行されるので、結果としては「上書きされたxxの指す場所に飛んでいって実行することができる」ということになります。

しかし、「上書きされたxxの指す場所に飛んでいく」といっても、飛んでいくべき場所が具体的にどんな数値で表されるのでしょう?今の我々にはそれを知る手段がありません。そのために使うのが nll という[擬似命令](xlaiso'd xalergerl)です。

擬似命令というのは、2003lkで記述されるけれど2003fが直接実行する[命令](xlaiso)ではないもののことでしたね。

nllは「[次に述べるもの](ny la lex)」の略で、直後に名前を書き、その後に命令を書くことで、その命令に名前を付けることができます。

つまり、

kRz 3 f2 
nll polta1
ata f3 f2
kRz f0 f3@

と書くことで、ata f3 f2に対してpanqaという名前を付けることができます。

なお、当然ながら、

kRz 3 f2 
nll polta1
ata f3 f2
nll polta1
kRz f0 f3@

のように名前が重複することは禁止されていますし、

kRz 3 f2 
nll f0
ata f3 f2
kRz f0 f3@

のように、既にfirjalの名前として使われているものをnllで使うのも禁止されています。

名前を付けた場所に飛んでいくためには、その名前を直接xxkRzすることで実現できます。

kRz 3 f2
kRz polta1 xx
kRz 5 f2
nll polta1
fen

とすると、最後までたどり着いたときのf2の値は5ではなく3になります。

なお、ここではpolta1という名前を定義する前にkRz polta1 xxと書いていますが、これは許されます。

では、このように書くとどうなるでしょう?

nll polta1
ata 1 f0
kRz polta1 xx

お分かりですね、永遠にf0に1を足し続け、いつまで経っても抜け出すことができません。

今まで実現できなかった「繰り返し」ができるようにはなったものの、決して抜け出せないのではそこまで役に立ちません。次は、そのような機構を実現するための方法について学んでいきましょう。


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