R-WHILE道場
R-WHILEプログラムを書いてリスト操作の可逆性を保つ
R-WHILE は横山研の rwhile-C-ocaml インタプリタが扱う可逆プログラミング言語。
すべての文が逆実行可能で、入力を出力に写したあと、同じプログラムを逆向きに走らせると入力に戻る。
破壊代入のかわりに X ^= E(XOR的更新)と X <=> Y(スワップ)でデータを動かす——
これが「情報を捨てない計算」。10段の課題で道場破りを目指せ。
初段入門
KATA 1 / 10
—
—
—
エディタ R-WHILE
コンソール trace
> R-WHILE 道場、開門。
> 課題のコードを書き、▶ 順実行、◀ 逆実行 で挙動を確かめなさい。
> 「この段に挑戦」を押すと、複数の入力で順/逆の両方を厳格チェックします。
順 出力
—
逆 復元
—
可逆性
—
命令数
0
文法 (簡易):
X ^= E // X を E と XOR/置換更新
X <=> Y // 値スワップ
rev X // リスト反転(可逆)
push E to X // E を先頭に挿入
pop X to Y // X の先頭を Y に取り出す (Y は空必須)
if E then S1 else S2 fi E
loop S until E from E
// E: 整数, リスト[..], 変数, hd X, tl X, 0/1
操作
左パネルでコードを書く(Tabはインデント)。▶ 順実行 は X → Y、 ◀ 逆実行 は Y → X を走らせる。挑戦 は複数テストケースで順実行→逆実行を連続実行し、 入力を完全復元できるかを採点。10段すべてクリアで 師範。
ヒント: 通常のWHILEと違い「X = Y+1」のような破壊代入は禁止。
X ^= Y+1 のように 逆も計算できる更新 しか使えない。
これが Bennett 流の「ゴミなし計算」。