我想定义一个运算符,其中输入和输出都是函数。例如,说我有
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)的运算符。但是,Mathematica无法正确解释op1[op2[f,x,y,z],x,y,z]
等表达式。
目前唯一的解决方法是
g[x_,y_,z_]:=op2[f,x,y,z];
result[x_,y_,z_]:=op1[g,x,y,z]
含糊不清的问题:如何让这个不那么笨拙?
不太模糊:Mathematica中是否存在部分评估的概念,因此A [f, - , - , - ]之类的东西被正确解释为3个变量的函数?
答案 0 :(得分:1)
首先,你编写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]
这非常接近你想要的。
答案 1 :(得分:0)
我认为您可以使用Composition
:http://reference.wolfram.com/language/ref/Composition.html
Composition[op1,op2][x,y,z]
一般情况下,请参阅http://reference.wolfram.com/language/guide/FunctionalProgramming.html了解与函数编程相关的功能。