.与$ in haskell相比

Ram*_*amy 7 haskell

可能重复:
Haskell:之间的区别.(点)和$(美元符号)

好的我明白这个:

f(g(x))
Run Code Online (Sandbox Code Playgroud)

可以改写:

f $ g(x)
Run Code Online (Sandbox Code Playgroud)

也可以改写:

f . g(x)
Run Code Online (Sandbox Code Playgroud)

我没有完全掌握的是两者在功能上不重叠的地方.我从概念上理解他们并没有完全重叠,但是有人可以一劳永逸地为我澄清这一点吗?

scl*_*clv 21

Prelude> :t ($)
($) :: (a -> b) -> a -> b
Prelude> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

$将函数应用于值. .组成两个功能.

所以我可以写出f $ g x"将f应用于(g of x)"或f . g $ x"将f和g的组合应用于x".一种常见的风格是在左边堆积点,美元尾随.原因是这f $ g $ x意味着同样的事情,f . g $ x但表达f $ g本身通常是没有意义的(实际上,可能是类型错误),而表达f . g意味着"f和g的组成"

  • 对于无数的`f`和`g`(考虑`(\ f - > f 0)$(\ x - > x + 1)`),`f $ g`是完全可能和良好类型的,它与`` fg`.否则,正确. (3认同)

Lan*_*dei 14

除了已经说过的内容之外,在这种情况下你需要$ as"功能应用胶水":

map ($3) [(4+),(5-),(6*),(+4),(*5),(^6)]
--[7,2,18,7,15,729] 
Run Code Online (Sandbox Code Playgroud)

在示例中既(.3)不会也(3)不会起作用.

  • +1 - 讨论的重要补充 (3认同)