Functional programming Mathematica中函数的组合函数
我想定义一个操作符,其中输入和输出都是函数。例如,假设我有Functional programming Mathematica中函数的组合函数,functional-programming,wolfram-mathematica,currying,Functional Programming,Wolfram Mathematica,Currying,我想定义一个操作符,其中输入和输出都是函数。例如,假设我有 op1[f_,x_,y_,z_]:= f[y,x,z] op2[f_,x_,y_,z_]:=f[x,z,y] 例如,我想组合op1和op2以获得将f(x,y,z)发送到f(z,x,y)的运算符。然而,诸如op1[op2[f,x,y,z],x,y,z]之类的表达式并没有被Mathematica正确解释 目前唯一的解决办法是 g[x_,y_,z_]:=op2[f,x,y,z]; result[x_,y_,z_]:=op1[g,x,y,z]
op1[f_,x_,y_,z_]:= f[y,x,z]
op2[f_,x_,y_,z_]:=f[x,z,y]
例如,我想组合op1
和op2
以获得将f(x,y,z)发送到f(z,x,y)的运算符。然而,诸如op1[op2[f,x,y,z],x,y,z]
之类的表达式并没有被Mathematica正确解释
目前唯一的解决办法是
g[x_,y_,z_]:=op2[f,x,y,z];
result[x_,y_,z_]:=op1[g,x,y,z]
我想你可以用
组合
:
通常情况下,有关函数式编程的相关功能,请参阅。首先,按照编写op1和op2的方式,它们不在f上操作,也不创建函数,只创建带有该函数的表达式。这没关系,但它解释了为什么你没有得到你想要的 作为中间立场,您可以这样做:
In[1]:= myop1[f_][x_, y_, z_] := f[y, x, z];
In[2]:= myop2[f_][x_, y_, z_] := f[x, z, y];
In[3]:= myop2[myop1[g]][a, b, c]
Out[3]= g[c, a, b]
这很接近你想要的
In[1]:= myop1[f_][x_, y_, z_] := f[y, x, z];
In[2]:= myop2[f_][x_, y_, z_] := f[x, z, y];
In[3]:= myop2[myop1[g]][a, b, c]
Out[3]= g[c, a, b]