【发布时间】:2014-11-25 15:36:52
【问题描述】:
我有兴趣仅通过其属性在 Mathematica 中定义抽象函数 f[x,y]。
例如,我希望 Mathematica 了解并简化使用 f[a+b,c] = f[a,c] + f[b,c] 等。
我应该如何以这种方式定义一个函数?
【问题讨论】:
我有兴趣仅通过其属性在 Mathematica 中定义抽象函数 f[x,y]。
例如,我希望 Mathematica 了解并简化使用 f[a+b,c] = f[a,c] + f[b,c] 等。
我应该如何以这种方式定义一个函数?
【问题讨论】:
这可能会让你开始。
Clear[f];
SetAttributes[f, HoldFirst];
f[s_Plus, b__] := f[#, b] & /@ List @@ Hold[s][[1]] // Total
f[a + b + c, d, e]
f[a, d, e] + f[b, d, e] + f[c, d, e]
【讨论】:
一种通用的方法:
ClearAll[f]
e : f[s : (_Plus | _Times | _Dot), b__] := Thread[Unevaluated@e, Head[s]]
现在
f[a + b, c]
f[a*b, c]
f[a.b, c]
返回
f[a, c] + f[b, c]
f[a, c] f[b, c]
f[a, c].f[b, c]
短版:
ClearAll[f]
e : f[(s : Plus | Times | Dot)[__], b__] := Thread[Unevaluated@e, s]
【讨论】: