「型システム入門」のオープンな再帰について

「オープンな再帰」の「オープン」は分かるんだけど、なぜ「再帰」なのかという疑問に対するやりとり。
4
山本和彦 @kazu_yamamoto

TaPL 教えて: p178 の「オープンな再帰」は、Template Method パターンとかのことでしょうか? そうなら、どの辺りが「再帰」なんでしょうか?

2013-03-28 16:17:29
Keigo Imai @keigoi

@kazu_yamamoto オブジェクトのメソッドが、(他のメソッドを呼び出すときのレシーバとかで)オブジェクト自身を参照するところで再帰します。例えばHaskellで、関数型をフィールドにもつ型でオブジェクトを作ろうとしてみると、やはり似たような値再帰が必要になるはず。

2013-03-28 16:23:47
がくぞ @gakuzzzz

@kazu_yamamoto 暗黙的な this が介在してる再帰呼び出しなイメージですね。 http://t.co/9n6XIJpJv3

2013-03-28 16:25:49
山本和彦 @kazu_yamamoto

.@gakuzzzz 記事の紹介ありがとうございます。開かれているのは分かるんですが、再帰が本質なのかまだ分かっていません。もう少し勉強します。

2013-03-28 16:37:52
Atsushi Igarashi @50storms

@kazu_yamamoto ここの例については,プログラム実行が同じ文面のところに戻ってこないので,その意味では「再帰」というのは紛らわしいのかもしれません.

2013-03-28 16:57:50
Keigo Imai @keigoi

@kazu_yamamoto 正確にはメソッドの集まりを表すレコードを経由した再帰になります。このレコードを継承によって書き変えられ(オーバーライドでき)るよう、再帰において直接的に参照するのではなく、間接的に参照しておくのが、オープンな再帰です。18.10節に出てきますね。

2013-03-28 16:58:11
Atsushi Igarashi @50storms

@kazu_yamamoto (補足)あ,すいません p.178 がどこかは実は正確にわかっていません.18章の例のつもりでいました.

2013-03-28 17:00:23
Keigo Imai @keigoi

@kazu_yamamoto たしかにTemplate Methodですね。

2013-03-28 17:05:15
shelarcy(しぇらーしぃ) @shelarcy

twitter でやるならハッシュタグつけて、togetter にまとめてもらえると嬉しいかも #TAPL

2013-03-28 17:13:58
山本和彦 @kazu_yamamoto

.@keigoi はい。18.10 の例は、Template Method にみえますね。

2013-03-28 17:20:21
山本和彦 @kazu_yamamoto

.@50storms 同じ話題ですので、問題ないと思います。

2013-03-28 17:22:39
山本和彦 @kazu_yamamoto

.@50storms self の実装に fix が必要だという理解でいいでしょうか?

2013-03-28 17:23:29
Atsushi Igarashi @50storms

@kazu_yamamoto はい、それでよいと思います。一般にはふたつ(以上の)メソッドが相互再帰しているのを、継承する時に一部分を差し替えるようなことができます。

2013-03-28 17:30:10