one replyのなぞ

保木さんの論文を初めて読んでから、「one reply」というのが分からなくて、そのままずっと放置してました。
で、放置したことも忘れていたんですが、今回のことで思い出して、探索延長の部分のソースを見てみると、こんなコードが。

      else if ( ptree->nsuc_check[ply]
  && ptree->move_last[ply] - ptree->move_last[ply-1] == 1 )
 {
   ptree->onerp_extension_done++;
   extension = EXT_ONEREP;

move_lastは指し手を格納しているはず、指し手から指し手を引き算するとは…?
Javaの知識とカンだけで読んでいるので、こういうのが出てくるとお手上げです。

で、ひねり出したのがこんな解釈です。
・move_lastは最終の指し手を格納しているアドレスを指している
・上記の引き算はこんな意味
 「自ノードの最終指し手格納アドレス−親ノードのそれ=1」
 →「自ノードの最終指し手格納アドレスが、親ノードのそれから1つしか増えてない」
 →「自ノードの指し手は1つしかない」

これがよく聞くポインタっていうやつなんでしょうか。
Cを勉強してから出直してきます。。

それにしても、読めば読むほどため息が出てきます。
探索の根幹部分のコードは、各種の枝刈りやextension/reductionにもかかわらず、驚くほど単純。
多重反復深化なんかも、いかめしい言葉に引きずられて難しく考えすぎてました。
いろいろ試みたあげく実装を断念していた*1のですが、実際はひどく簡単な内容で、「何だ、そんなことだったのか」という感じです。
この辺はすぐに役立ちますね。

興味のあるところは大体読み終わったし、宿題もまだ残っているので、そろそろ開発に戻ります。

*1:今でもコードに残骸が残っている