子のリンクされたリストと同じノード型の単一の親を含むTree<E>
ルート オブジェクトを参照するクラスを持つ C# でジェネリック ツリー データ構造を実装したいと考えています。TreeNode<E>
これは基本的なツリー構造であり、この部分の実装に問題はありません。
このツリー構造を拡張して、拡張する を作成しFunction
、適切に拡張Tree<double>
する補数ノード タイプを作成します。この構造を使用して、関数の適切な変数で評価できる数学関数を表現したいと考えています。Expression
TreeNode<double>
私は現在、このプロジェクトの設計段階にあるので、これを実装する方法はたくさんありますが、パラメーター署名を気密に保ちながら、すべてのタイプの関数をカバーする適切なレベルの抽象化を持つ設計を探しています. たとえばFunction
、数学関数の実行時にを作成できるはずです。
f() = 42
、f(x) = x^2
、f(x, y) = x/y + 5
、など
everyExpression
に独自の子のリスト (引数が与えられた関数のプロセスを定義するために分割される部分式) がある場合は、値を取り込んでスカラー値を吐き出すExpression
何らかの評価方法を使用する必要があります (または、可能であれば、double
これをベクトル レベルに抽出します)。
私は LINQ のような関数型言語の経験があまりありませんが、誰かがそうであれば、それを使用して計画していることを実装するためのシンプルで強力な方法はありますか? SinExpression(X)
あらゆる種類の基本的な操作 (またはAdditionExpression(X,Y)
ものなど) に対して具体的なクラスを作成する必要がなく、その代わりに辞書に格納できる可能性のある数学関数をその場で定義できれば素晴らしいと思います。他の式になるか、浮動小数点値に要約されます。その時点で、基本コンストラクターで評価関数を定義するだけで、必要に応じて具体的な関数クラスでこれらの抽象化された関数クラスを拡張できます。
また、関数の式ツリーを直接変更する (ノードの変更、ブランチの削除など) 別のプログラムでこれらの式を使用する予定であるため、ツリー構造を維持することが重要であることにも注意してください。
誰かが私を正しい方向に向けることができますか? 私はそれを大いに感謝します。