Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中变量的递归扩展#_C#_Variables_Implementation - Fatal编程技术网

C# c语言中变量的递归扩展#

C# c语言中变量的递归扩展#,c#,variables,implementation,C#,Variables,Implementation,我需要实现一个程序,其中我将有一个基本变量x及其扩展,如exp(x)、ln(x)、exp(5ln(x))等。我曾想过有一个接口ieextensible,但我不确定如何实现这些变量。我考虑的选项是使用一些列表来保持扩展的顺序和类型。但我不确定这种实现是否容易处理:我需要将这些扩展用作有理函数中的变量 编辑:我在最后添加了一个我需要的小样本: x^2+3exp(ln(2x))-ln(x^4) 这种表达式被传递给函数F,该函数将执行一些计算。 函数F需要确切地知道有哪些扩展。很难收集您在这里询问的确切

我需要实现一个程序,其中我将有一个基本变量
x
及其扩展,如
exp(x)、ln(x)、exp(5ln(x))
等。我曾想过有一个接口
ieextensible
,但我不确定如何实现这些变量。我考虑的选项是使用一些列表来保持扩展的顺序和类型。但我不确定这种实现是否容易处理:我需要将这些扩展用作有理函数中的变量

编辑:我在最后添加了一个我需要的小样本:

x^2+3exp(ln(2x))-ln(x^4)

这种表达式被传递给函数
F
,该函数将执行一些计算。
函数
F
需要确切地知道有哪些扩展。

很难收集您在这里询问的确切内容,但听起来您可能想使用一些匿名函数来定义“扩展”,然后您可以将它们存储在查找表中,如您所说:

下面是一些基本的示例代码,其中有一个递归示例,用于演示该思想:

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 )
);
Func sqr=
(x)=>
{ 
返回x*x;
};
函数系数=
(n)=>
{
返回n>1?
n*(long)(MethodInfo.GetCurrentMethod().Invoke(null,新对象[]{n-1})):
N
};
var DataObjects=new[]
{
新的{Name=“sqr(1)!”,Value=factoral(sqr(1))},
新的{Name=“sqr(2)!”,Value=factoral(sqr(2))},
新的{Name=“sqr(3)!”,Value=factoral(sqr(3))},
新的{Name=“sqr(4)!”,Value=factoral(sqr(4))},
新的{Name=“sqr(5)!”,Value=factoral(sqr(5))},
};
DataObjects.ToList().ForEach
(
d=>
控制台写入线(d)
);
产生输出:

名称sqr(1)! 值1

名称sqr(2)! 值24

名称sqr(3)! 价值362880

名称sqr(4)! 价值2092278988000

名称sqr(5)! 值7034535277573963776


希望这有帮助,

您可能正在寻找类似的东西。

您需要的是一个数学解析器,碰巧我为.NET创建了一个数学解析器,您可以下载它。它有完整的源代码,允许您设置自定义委托函数来创建内置操作。此外,它还具有变量支持,因此您可以定义一个变量(例如示例中的
x
),并可以使该变量等于您想要的任何变量。看看

@Matthias Koch,说来话长)))通过扩展,你是指对某个变量x的操作吗?我猜你想用这些来构建某种表达式来进行操作或计算,而不仅仅是使用ln和Exp的内置数学方法。你能展示一下你到目前为止已经尝试过的,提供一个例子来说明你希望你的程序做什么,也许还可以把它作为一个问题来表达吗?很难理解你在问什么,很遗憾,因为它看起来很有趣。我认为你使用的是非标准术语(谷歌让我回到这个问题)。看来你想实现某种系列,到底是什么?@Paolo Tedesco,我已经添加了一个小样本,说明我正在尝试做什么。希望编辑会让我更清楚