D言語版AATT

メタプログラミングの会
http://atnd.org/events/9072
http://d.hatena.ne.jp/kmizushima/20101204/1291479701
以前作成したAATTを発表してきました。


発表資料
http://www12.ocn.ne.jp/~dante98/aatt.pptx
ソース
http://www12.ocn.ne.jp/~dante98/zip/aattd.zip


赤黒木の説明→実装アルゴリズム→Dへの移植話という流れです。
読み返してみるとC++版(.aattを食わせるとC++用のヘッダを出力)の話がなくて、いきなりDへの移植になってたり説明が足りないところがチラホラ。


今回はC++版をDへ単純移植したものでしたが、ソース中にAATTのパターン列を並べると長くて読みにくく、
一つの変換毎にインスタンス化して、パターンマッチの順次評価や再帰D言語側の処理に任せた方が分かりやすそうでした。
質問タイムにも「もっと汎用的に使えないのか?」といった意見をもらいましたし、コードに埋めること前提で再設計してみると面白いかもしれません。


あと、D版動かしていてバグを見つけたのでC++版も修正してあります。
http://www12.ocn.ne.jp/~dante98/zip/aattc.zip (CR/LF改行)
http://www12.ocn.ne.jp/~dante98/zip/aattc.tar.bz2 (LF改行)
count_black()が左部分木の黒高さ同士を比較していたので全くテストになってなかったという、、、。