我有三个函数x y z和一个称为functionComposer的函数。

我希望functionComposer具有x y z函数作为参数,并返回一个将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)


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

最佳答案

我以某种方式感觉好像您仍然想要一系列令人困惑的点,所以:

functionComposer :: (c -> d -> e) -> (a -> c) -> (b -> d) -> a -> b -> e
functionComposer x y z = (. z) . (x . y)


这是“自然地”来自

functionComposer x y z a = (x . y) a . z


但是为什么要停在那里?

functionComposer x y = (. (x . y)) . flip (.)


不再:

functionComposer x = (. flip (.)) . flip (.) . (x .)


更多!

functionComposer = (((. flip (.)) . flip (.)) .) . (.)

关于haskell - Haskell-怪异地构成三个功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23620257/

10-09 22:47