Wolfram mathematica 通过函数的属性定义函数

Wolfram mathematica 通过函数的属性定义函数,wolfram-mathematica,Wolfram Mathematica,我感兴趣的是在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,

我感兴趣的是在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]


这可能会让你开始

 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, 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]

广义方法:

ClearAll[f]
e : f[s : (_Plus | _Times | _Dot), b__] := Thread[Unevaluated@e, Head[s]]
现在

返回

   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]

谢谢这就是我想要的。谢谢!这就是我想要的。