Haskell文档(http://hackage.haskell.org/package/base-4.5.0.0/docs/Prelude.html#v:-36-)指出:
$具有低的,右关联的绑定优先级,因此它有时允许省略括号; 例如:
Run Code Online (Sandbox Code Playgroud)f $ g $ h x = f (g (h x))
也就是说,$可以用括号代替(在$ after后出现的任何内容周围).
所以当我在/sf/answers/579255701/上看到一个例子时,
maximum . map product . groupsOf 5 $ x = (maximum . map product .
groupsOf 5) x
Run Code Online (Sandbox Code Playgroud)
我认为它应该是:(括号是在$ $之后出现的任何东西)
maximum . map product . groupsOf 5 $ x = maximum . map product .
groupsOf 5 (x)
Run Code Online (Sandbox Code Playgroud)
我知道我错了,但我不知道为什么.
DJG*_*DJG 13
$采用左边的任何函数并将其应用于右边的任何函数.在可以定义喜欢如此:
expr1 $ expr2 = expr1 expr2
Run Code Online (Sandbox Code Playgroud)
当然,将括号括在任何标识符周围并不会改变任何东西,所以让我们这样做:
expr1 $ expr2 = (expr1) (expr2)
Run Code Online (Sandbox Code Playgroud)
由于Haskell是惰性的,我们可以简单地将参数替换$为结果表达式:
f $ g $ h x = (f) (g $ h x) = (f) ((g) (h x))
Run Code Online (Sandbox Code Playgroud)
要么
maximum . map product . groupsOf 5 $ x = (maximum . map product . groupsOf 5) (x)
Run Code Online (Sandbox Code Playgroud)
因此,$(当充分的应用)可以被看作是把括号围绕这两个表达的两侧.