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,我已经添加了一个小样本,说明我正在尝试做什么。希望编辑会让我更清楚