c# 中的部分函数应用程序,其中包含更改的绑定变量

Partial function application in c# with changing bound variables

我在使用更改的绑定变量正确设计部分函数应用程序时遇到问题。

假设我有一些平衡方程式

f(x_1,...,x_n)=0

然后我把除 x_k 之外的所有变量都放在那里(k 改变了!),得到函数

g(x_k)=f(x_1=X_1,...,x_k,...,x_n=X_n)

然后我将它放入一些求解器中并得到 x_k 的解。只需几行代码即可说明:

Func<double,double,double> f;
Func<double,double> g;
f = (x,y) => x - y;
g = (z) => f(10,z); // hier is the binding of the 1-st parameter hard-coded,
//but must be some way to choose which parameter to bind
double solution = solve(g);

在某种程度上,我需要传递一个长度为 n-1 的数组,数字 k 可以释放并动态构建一个新函数 g。您将如何进行?

p.s。如果可能的话,n 也应该是可变的,但是,据我所知,这将是 code/design 复杂性的一大飞跃。如果您对此有强烈的看法,请验证我的理解。

粗糙,但只是一个想法的种子:

Func<int,double,double> g;
g = (i,z) => (i==0) ? f(10,z) : (i==1) ? f(z,10) : etc

更灵活复杂的建议:

Func<double[],double> f;
Func<int[],double[],double> g;
g = (i,d) => f(i.Select( x => d[x]).ToArray());

介于两者之间:

Func<int,double,double[],double> g;
g = (k,c,d) => f(d.Select( (i,x) => (i!=k) ? x : c).ToArray());