← カタログへ戻る #093

ROOPLランド

可逆オブジェクト指向ROOPL++でクラスを設計するパズル

ROOPL++ は横山研の可逆オブジェクト指向言語。 フィールド更新は += -= ^= のような可逆代入のみ、メソッドは call(順)と uncall(逆)で呼べる。 そしてオブジェクト参照は <=> でスワップする。 クラスを定義し、メソッドを順/逆に呼んで世界の状態を可逆遷移させ、目標状態を作るパズル。

WORLD 1 / 7 入門:incとdec

世界 (Heap)

オブジェクト

クラス定義 / メソッド

操作履歴

クラスのメソッドをクリックで順実行、Shift+クリックで逆(uncall)。

操作

クラスカードのメソッドボタンをクリックすると call(順実行)、 Shift+クリックで uncall(逆実行)。 オブジェクトカードの swp ボタンで2つ選び <=> スワップUndo は最後の操作を機械的に巻き戻す(可逆計算の本領)。目標達成チェックで次の世界へ。

可逆OOPの肝:「メソッドの逆」は副作用の系列を逆順に巻き戻す。 これにより undo は手間ゼロで自動生成される——通常のOOPと違い、状態を捨てない設計が言語仕様で保証される。