Haskell-以奇怪的方式组成三个函数

use*_*355 2 haskell composition

我有三个函数xyz和一个名为functionComposer的函数.

我希望functionComposer将函数xyz作为参数,并返回一个函数,该函数使用y和z的结果作为x的参数并应用x.

在数学符号中: x(y(a),z(b))

我不是要求这个: functionComposer x y z = x.y.z

例如:

double x = x + x

summer x y = x + y

functionComposer summer double double = summer (double) (double) 
Run Code Online (Sandbox Code Playgroud)

如果x = 2,结果应为8(2 + 2)+(2 + 2)

Dan*_*zer 10

你也可以(->) a像这样使用applicative实例

import Control.Applicative


funcComp summer double1 double2 = summer <$> double1 <*> double2
Run Code Online (Sandbox Code Playgroud)

或monad实例

funcComp summer double1 double2 = liftM2 summer double1 double2
Run Code Online (Sandbox Code Playgroud)

理解这一点的方法是,for (->) aapplic和monad实例都意味着对函数值进行"参数化" double1并且double2都接受.

  • 可爱可爱的应用.MMMMMM. (4认同)
  • 所以,基本上,`funcComp = liftA2`. (3认同)

chi*_*chi 5

使用你的符号:

functionComposer summer double1 double2 = \x -> summer (double1 x) (double2 x) 
Run Code Online (Sandbox Code Playgroud)

所述\x -> ...表示函数映射x....

注意我必须给double函数参数赋予不同的名称,因为通常你想要组成不同的函数.