2012-05-06 7 views
1

ベース変数xとその拡張子がexp(x), ln(x), exp(5ln(x))などとなるようなプログラムを実装する必要がありますが、私はインターフェイスがIExtensibleであると考えていましたが、変数。私が検討しているオプションは、シーケンスと拡張の種類を保持するためのリストを使用しています。しかし、私はこの種の実装が扱いやすいとは思えません。これらの拡張を有理関数の変数として使う必要があります。 LN(X^4)Cの変数を再帰的に拡張する

-

のx^2 + 3exp(LN(2倍)):

編集:私は最終的に持っているために必要なものの小さなサンプルを追加しました

この種類の式は、いくつかの計算を実行する関数Fに渡されます。 関数Fは、そこにある拡張子を正確に知る必要があります。

+1

私はそれを得ません:D – Matthias

+0

@Matthias Koch、これは長い話です)))) – superM

+0

拡張によって、あなたは何らかの変数xの操作を意味しますか?私はあなたがlnとexpのビルトインMathメソッドを使うのではなく、これらを使って何らかの式を作成して操作したり評価したりしたいと思っています – Bort

答えて

2

あなたが必要とするのは数学のパーサです。それで私は.NET用の数学パーサーを作成し、from hereをダウンロードできます。これは完全なソースコードを持ち、組み込み操作を作成するためのカスタムデリゲート関数を設定することができます。加えて、可変サポート(例ではxなど)を定義でき、その変数を任意のものにすることができます。それをチェックしてください

0

あなたがここで求めていることを正確に収集するのは難しいですが、あなたの「拡張機能」を定義するためにいくつかの匿名関数を使いたいかもしれないように聞こえるかもしれません。そして、ルックアップテーブルあなたが言ったように:ここでは

がアイデアを証明するために、1つの再帰的な例で、いくつかの基本的なサンプルコードです:

Func<long,long> sqr = 
    (x) => 
    { 
     return x * x; 
    }; 

Func<long,long> factoral = 
    (n) => 
    { 
     return n > 1 ? 
      n * (long)(MethodInfo.GetCurrentMethod().Invoke(null, new object[] { n - 1 })) : 
      n; 
    }; 

var DataObjects = new [] 
{ 
    new { Name = "sqr(1)!", Value = factoral(sqr(1)) }, 
    new { Name = "sqr(2)!", Value = factoral(sqr(2)) }, 
    new { Name = "sqr(3)!", Value = factoral(sqr(3)) }, 
    new { Name = "sqr(4)!", Value = factoral(sqr(4)) }, 
    new { Name = "sqr(5)!", Value = factoral(sqr(5)) }, 
}; 

DataObjects.ToList().ForEach 
(
    d => 
     Console.WriteLine(d) 
); 

は出力が得られます。

名称SQR(1)! 値1

名前sqr(2)! 値24

名前sqr(3)! 値362880

名前sqr(4)! 値20922789888000

名前sqr(5)!このことができます 値7034535277573963776

希望、

1

はおそらくNCalcのようなものを探しています。

関連する問題