ROOPLランド
可逆オブジェクト指向ROOPL++でクラスを設計するパズル
ROOPL++ は横山研の可逆オブジェクト指向言語。
フィールド更新は += -= ^= のような可逆代入のみ、メソッドは call(順)と uncall(逆)で呼べる。
そしてオブジェクト参照は <=> でスワップする。
クラスを定義し、メソッドを順/逆に呼んで世界の状態を可逆遷移させ、目標状態を作るパズル。
WORLD 1 / 7
入門:incとdec
世界 (Heap)
オブジェクト
クラス定義 / メソッド
操作履歴
クラスのメソッドをクリックで順実行、Shift+クリックで逆(uncall)。
操作
クラスカードのメソッドボタンをクリックすると call(順実行)、
Shift+クリックで uncall(逆実行)。
オブジェクトカードの swp ボタンで2つ選び <=> スワップ。
Undo は最後の操作を機械的に巻き戻す(可逆計算の本領)。目標達成チェックで次の世界へ。
可逆OOPの肝:「メソッドの逆」は副作用の系列を逆順に巻き戻す。 これにより undo は手間ゼロで自動生成される——通常のOOPと違い、状態を捨てない設計が言語仕様で保証される。