通过其属性定义功能

时间:2014-11-25 15:36:53

标签: wolfram-mathematica

我对通过其属性在 Mathematica 中定义抽象函数f[x,y]感兴趣。

例如,我希望 Mathematica 知道并简化使用f[a+b,c] = f[a,c] + f[b,c]等。

我应该如何以这种方式定义一个函数?

2 个答案:

答案 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]