C# 3.0 の Expression Tree で Symbolic Calculation

たまには C# 3.0 / .NET Framework 3.5 らしいネタを。
と思い立って、Expression Tree を(記号的に)微分するライブラリ作ってみた。
式木(Expression Trees) - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

LINQ 関連は LINQ to Object ばっかり触ってるし(話題性があるのはどちらかというと LINQ to SQL)、いまさら C# 2.0 なイテレータの話とかしてたし。ここは1つ、Expression Tree でもいじって遊んでみようかと。

.NET Framework 3.5 の Expression Tree の素敵なのは、匿名デリゲートと同じ記法で書けて、

Expression<Func<double, double>> e = x => x * Math.Log(x);

式木をいじくり倒した後に動的にコンパイルして実行できるところよね。

var dx = new DefferentialOperator("x");
Func<double, double> f = dx.Apply(e).Compile();
Console.Write(f(1));