我正在通过第一本haskell书并与$运营商斗争:
以下行有效:
map (>= 16) . take 5 $ iterate (\x -> x^2) 2
Run Code Online (Sandbox Code Playgroud)
但是,以下内容不是:
map (>= 16) . take 5 (iterate (\x -> x^2) 2)
Run Code Online (Sandbox Code Playgroud)
可能的原因:`take'应用于太多参数
我没有在这里看到问题.take采用int和列表.据我所知,我提供了两个论点.
如果我想避开$操作员,我该怎么办?
该($) :: (a -> b) -> a -> b操作是,只是有一个功能的优先级最低(infixr 0仅($!)与seq具有相同的优先级).结果是:
map (>= 16) . take 5 $ iterate (\x -> x^2) 2
Run Code Online (Sandbox Code Playgroud)
相当于:
(map (>= 16) . take 5) (iterate (\x -> x^2) 2)Run Code Online (Sandbox Code Playgroud)
左手操作数的括号也是如此.
Haskell实际上是一个很好的事情,你可以使用运算符作为分组机制:($)简单地定义为($) f x = f x,但由于它是一个运算符,它可以用作避免括号的方法.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |