Tan*_*may 2 haskell function-composition
我可能会问一些非常愚蠢的事情,答案可能非常简单,因为"实施者选择了那种方式",但我在这里.
要添加两个数字,我们可以使用任何样式:(10+) 4或10 + 4或(10 + 4).
而如果我们有两个功能,说add10和multiply5
并撰写他们做出一个功能出来,说add10andMultiply5
则
add10.mul5 10似乎给了一个错误,而
add10.mul5 $ 5将工作,
(add10.mul5) 5将工作,
add10andMultiply5 5也可以工作.
任何评论为什么第一个不应该工作?请赐教.谢谢.
这是一个优先问题,或者不同操作绑定的紧密程度.
在Haskell中,函数应用程序具有最高优先级(最严格的绑定),其次是函数组合,然后是函数应用程序$.它有点像算术,其中取幂具有最高优先级,然后乘法,然后加法,这样
1 + 2 ^ 4 * 3 + 4 * 3
Run Code Online (Sandbox Code Playgroud)
被解析为
1 + ((2 ^ 4) * 3) + (4 * 3)
Run Code Online (Sandbox Code Playgroud)
在你的例子中,你有
add10 . mul5 10
Run Code Online (Sandbox Code Playgroud)
将被解析为
add10 . (mul5 10)
Run Code Online (Sandbox Code Playgroud)
因为函数应用程序绑定最紧密.这不起作用,因为它mul5 10是一个数字而且add10是一个函数,并且组合仅在两个函数之间起作用.
另一方面,
add10 . mul5 $ 10
Run Code Online (Sandbox Code Playgroud)
被解析为
(add10 . mul5) $ 10
Run Code Online (Sandbox Code Playgroud)
因为函数组合的优先级高于应用程序$.
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |