Haskell中的通用函数组合

hsk*_*new 6 haskell function function-composition

我在这里阅读,我注意到,例如,如果我有以下函数定义:

a :: Integer->Integer->Integer
b :: Integer->Bool
Run Code Online (Sandbox Code Playgroud)

以下表达式无效:

(b . a) 2 3
Run Code Online (Sandbox Code Playgroud)

组合的功能必须只有一个参数,这很奇怪.

这个限制是因为在Haskell中定义最通用的一个问题还是有其他原因?

我是Haskell的新手,所以我问的也许是无用的问题.

Phi*_*hil 7

当你这样做时a 2 3,你不会申请a2个参数.你实际上是应用a它唯一的参数,产生一个函数,然后把这个函数应用到3.所以你实际上做了2个应用程序.所以从某种意义上说,你所拥有的并不等同于此:

a :: (Integer, Integer) -> Integer
b :: Integer -> Integer
(b . a) (2, 3)
Run Code Online (Sandbox Code Playgroud)

你可以做到这一点,顺便说一句

(b . a 2) 3
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可以使用原始的`a`和`b`函数,以及`uncurry`前者.`(b.不发生a)(2,3)` (3认同)