3
我有兴趣创建一个函数Derivative,该函数返回一个函数,该函数是传递给它的某个函数的派生函数。但是,我希望能够专注于此,因此,对于特定功能,我可以返回解析解决方案。D中函数的类型
所以,我正在寻找这样的事情:
auto Derivate(alias Function)(x)
{ return (Function(x+h) - Function(x-h))/(2h);}
auto Derivate(BSpline!(k)(x))(x)
{ return k * BSpline!(k-1)(x) + x * BSpline!(k-1)(x); }
不过,我现在有B样条这样定义的:
pure Real BSpline(int k : 0, Real)(scope Real x, scope const(Real)[] t)
{
if (t[0] <= x && x < t[k+1])
return 1;
else
return 0;
}
pure Real BSpline(int k, Real)(scope Real x, scope const(Real)[] t)
{
if (t[0] <= x && x < t[k+1])
{
Real a = (x - t[0])/(t[k] - t[0]);
Real b = (t[k+1] - x)/(t[k+1] - t[1]);
Real c = BSpline!(k-1,Real)(x, t[0..k+1]);
Real d = BSpline!(k-1,Real)(x, t[1..k+2]);
Real rv = (c?c*a:c) + (d?d*b:d);
return rv;
}
else
return 0;
}
所以对B样条类型签名将是真正的函数(Real,Real),这与其他类型的函数不可区分。是否可以通过opCall定义来解决这个问题以创建一个“BSpline”类?或者我可以做一些typedef来识别这个功能?
谢谢!
呃,h是第一函数自由变量,这是怎么回事都发生在那里? –