之间有什么区别。和(.)在Haskell中?
我正在尝试编写一个管道函数,该函数从右侧通过函数列表滚动值。该函数如下所示:
map . foldr (.) id
但我不明白它在这里做什么?我知道那.是函数组合,但有什么作用(.)呢?
回答
.and之间的区别与and 、and和所有其他(.)之间的区别相同:+(+)-(-)
- 没有括号,你有中缀形式,你把操作数放在符号之前和之后,如
f . g或3 + 5; - 带括号的是函数应用程序形式,其操作数都在函数名称之后,如
(.) f g或(+) 3 5。
对于具有“正常”名称的函数(例如myfunc. 然而,在这种情况下,普通名称需要myfunc它后面的参数(就像(.)),中缀形式是通过将名称放在反引号之间来获得的。
以下是一些等式示例:
f . g === (.) f g
a + b === (+) a b
a `fun` b === fun a b
i `elem` l === elem i l
作为附加信息,即使函数采用 2 个以上的参数,如
func x y z = whatever
您仍然可以使用中缀样式调用它,但是编写a `func` b将给您一个带有一个参数(对应于z)的函数,就像您所做的一样func a b。(这是部分应用程序。示例:f = (+) 3是有效的,它导致一个函数f将 3 添加到您传递给它的任何参数,例如f 5 == 8。)