我对通过其属性在 Mathematica 中定义抽象函数f[x,y]
感兴趣。
例如,我希望 Mathematica 知道并简化使用f[a+b,c] = f[a,c] + f[b,c]
等。
我应该如何以这种方式定义一个函数?
答案 0 :(得分:2)
这可能会让你开始。
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]
答案 1 :(得分:2)
一种通用方法:
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]