[PR]生年月日で2010年運命占い:初回無料!貴女の悩みを占い師に相談

ICFP 2004 Programming Contest

過ぎですが…

Haskilledとかいうチーム名で蟻作ってました。 コンテストについてはこちらを参照。 私と、某M君(名前はとりあえず伏せとく…)とでやってました。 提出したものはこちら。 説明ファイルはうそ英語が恥ずかしいので削除してます。
チーム名はもちろんHaskellのもじりです。

概要

問題についての説明はどこか他を見てもらうとして…

とりあえずの方針は、

とまぁ、いたってオーソドックスな感じ。シミュレータも適当にいくつか作りました。

戦略

実はよくわからんのですが…
あんた何しとったんや、ちゅう話ですが、 ほぼずっと蟻言語作ってました。駄目やん…
とりあえず分かる範囲では

時間が足りなくて、結構穴がありますね…

蟻言語 「A++」

これが私のメインといえばメインなのですが。
蟻のプログラムを全部人手で書くこともできますが、無茶なので、 C様の言語を実装しました。 有限状態オートマトンとしてコードを生成しますが、 コードを多重に生成して変数を扱えるようにしているのが最大にして唯一の特徴。
スタックの状態とかを考えないので、再帰的な計算はできません。 まぁ、めんどくさいので。
マクロのような機能もあります。
仕様についてはアーカイブのdoc/以下にある言語仕様とか提出した蟻の ソースを参照してください。
言語仕様はM氏が作ったプリミティブな言語を適当に拡張していったので、 微妙にいびつですが…

実装はHaskellで行いました。
パーザー書きやす過ぎ。ツリー構造扱いやす過ぎ。 とてもよいです。

実装は結構ナイーブです。 変数を複数使ったりすると指数関数的にコードが膨れます。 そういう理由で状態数10000を結構すぐに使い切ってしまうので、 オプティマイザを作りました。 割合簡単なアルゴリズムで冗長なジャンプ(flip 1 x x として内部的には生成)と 到達不可能なコードを削除します。
これはC++で作成…配列が使いたいんだよなぁ。

反省

最初Haskellでシミュレータ作って、一日以上つぶしてしまった。 まだまだモナドの扱いに熟練していないので無理すべきではなかったかもしれません… 結局できたものはめちゃくちゃ遅い使い物にならないもの。 結局M氏の作ったVBのを使うことに。 コンパイラを作り始めてからは割合スムーズにことが進みました。 もうちょっと早くから方針が立ってたらなぁ…ああ。


[PR]田丸麻紀さん愛用ダイエット:大人気サプリメント!注文殺到中です