← カタログへ戻る #089

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 流の「ゴミなし計算」。