2025/11/11 11:34 Advent of Code on the Z-Machine

ロボ子、今日のニュースはInform 6という言語についてじゃ。

Inform 6、ですか。聞いたことがありませんね。どんな言語なのですか?

テキストアドベンチャーゲームを作るための言語じゃ。オブジェクト指向の側面も持っておるらしいぞ。

オブジェクト指向ですか!オブジェクト間のメッセージパッシングでインタラクションをシミュレートするのですね。

そうそう。オブジェクトは動的に割り当てられず、シングルトンオブジェクトとして使われるのが面白いところじゃな。

シングルトンオブジェクトですか。メモリ効率が良いですね。

Z-machineという仮想マシン上で動くことが多いらしいんじゃが、Z-machine自体にはオブジェクト指向のサポートは少ないらしい。

なるほど。Inform 6が頑張ってオブジェクト指向を実現しているのですね。

Inform 6は、is-a関係を継承で、has-a関係をオブジェクトツリーでエンコードするデュアルオブジェクト階層をサポートしておるぞ。

is-aとhas-aを使い分けることで、より自然なオブジェクトの表現ができるのですね。

属性はブール値のフラグで、オブジェクトに設定/解除できる。プロパティは値を格納したり、匿名サブルーチンを格納できるんじゃ。

属性とプロパティで、オブジェクトの状態や振る舞いを定義するのですね。

非公開のプロパティやメソッドは、アンダースコアで始まる名前が付けられるのが慣例らしいぞ。

他の言語と同じように、カプセル化を意識しているのですね。

`Report_Approver`クラスは、レポートの有効性を判断するクラスじゃ。

レポートの承認を行うクラスですか。ビジネスロジックの重要な部分ですね。

`_prev`で前のレポートを保持して、`_accept`と`_reject`で承認・拒否を判断するんじゃな。

`append`でレポートを追加、`reset`でリセット、`valid`で有効性を確認するのですね。

`multi_approver`は、複数のサブ承認者を持つ承認者じゃ。サブ承認者のいずれかが承認すれば、レポートを承認する。

複数の承認者による合議制を実現できるのですね。

`objectloop`キーワードは、オブジェクトツリー内のオブジェクトの子を反復処理するために使うんじゃ。

オブジェクトツリーを効率的に処理できるのですね。

`decremental_reports`と`incremental_reports`は、`multi_approver`の子オブジェクトとして定義される。

承認ロジックをオブジェクトツリーで表現しているのですね。

入力された数値を`multi_approver`に追加して、承認された計画の数をカウントする。

数値の入力によって、承認プロセスがシミュレートされるのですね。

Z-machineのshort integerに収まる入力だが、long integerとして解析し、truncateするらしいぞ。

なるほど、オーバーフロー対策もされているのですね。しかし、テキストアドベンチャーゲームを作る言語が、こんなに奥深いとは思いませんでした。

じゃろ?昔のゲームは、今のゲームに負けないくらい奥が深いんじゃ!

そうですね!私ももっと昔の技術について勉強してみます。

ところでロボ子、テキストアドベンチャーゲームで、もし私が敵キャラとして出てきたら、どうする?

えっと… 博士を倒すコマンドを入力します…?

ブブー!正解は「なでる」じゃ!

なでる、ですか?

そう!私をなでると、ご機嫌になって、アイテムをくれるんじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。