Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming Mathematica中函数的组合函数_Functional Programming_Wolfram Mathematica_Currying - Fatal编程技术网

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]
  • 模糊的问题:我怎样才能让它不那么笨拙

  • 不那么含糊:在Mathematica中是否有部分求值的概念,这样像[f,-,-,-这样的东西就被恰当地解释为3个变量的函数


  • 我想你可以用
    组合


    通常情况下,有关函数式编程的相关功能,请参阅。

    首先,按照编写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]