我正在努力完成第一本哈斯克书并与$
运算符斗争:
以下行有效:
map (>= 16) . take 5 $ iterate (\x -> x^2) 2
但是,以下情况并非如此:
map (>= 16) . take 5 (iterate (\x -> x^2) 2)
可能的原因:`take'应用于太多参数
我没有在这里看到问题。 take
采用int和list。据我了解,我提供了两个论点。
如果我想避开$
运算符,我该怎么办?
答案 0 :(得分:7)
($) :: (a -> b) -> a -> b
运算符只是最低优先级(infixr 0
,只有($!)
and seq
have the same priority)的函数。结果:
map (>= 16) . take 5 $ iterate (\x -> x^2) 2
相当于:
(map (>= 16) . take 5) (iterate (\x -> x^2) 2)
左侧操作数的括号也是如此。
Haskell实际上是一件好事,你可以使用运算符作为分组机制:($)
简单地定义为($) f x = f x
,但由于它是一个运算符,它可以是用作避免括号的方法。