我在使用更改绑定变量正确设计部分函数应用程序时遇到问题。
想象一下,我有一些平衡方程式
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也应该是可变的,但是,根据我的理解,这将是代码/设计复杂性的一个重大飞跃。如果您对此有强烈意见,请验证我的理解。
答案 0 :(得分:1)
原油,但只是一个想法的种子:
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());