Quine-relay Advent calendar Day -10: Subleq

ref: https://github.com/mame/quine-relay

マイナス 10 日目の今日は、Subleq を追加しました (66 言語目、コミット) 。Subleq はいわゆる OISC の一種、つまり 1 種類の命令しか持たない難解プログラミング言語です。

Subleq プログラムは数字の羅列で、プログラムカウンタのある位置の 3 連続の数字 (r1 r2 addr) に対し、

1. mem[r2] に mem[r2] - mem[r1] を代入する
2. mem[r2] が 0 以下になったら addr にジャンプする (さもなくば直後の 3 連続の数字へ進む)

という動きを繰り返します。これだけでチューリング完全だそうです。なお入出力は memory mapped I/O (アドレス -1) を使います。

Quine リレーでは、直前の Standard ML で Subleq プログラムを生成します。はじめての Standard ML プログラミング。まあ大したプログラムじゃないですが。