遅延評価と即時評価
上の場合はインタプリタで遅延評価するわけだけど、こんな面倒をかけなくても即時評価することもできる。
interface IEngine { IEngine Jibun(params string message); IEngine Aite(params string message); IEngine If(Func<bool> pred, Func<IEngine, IEnd> then, Func<IEngine, IEnd> @else); IEnd End{ get; } }
外部のやつはこれを実装したものを与えることで言語が実行される。
この場合Ifは組み込みのものが使えるので実際のところいらない。
ただ俺はJibunとかAiteとかが実行された後クリック待ちかなんかをすることを想定しているのだけど、そのためにはIEngine実装クラスの中でスレッドを止めることが必要になる。これが俺にはなんだかすごくややこしく感じるのだが、それがなんに由来するものなのかいまだに良く分かっていない。