我目前正在学习Haskell与99 questions和我在一个解决方案中看到.
。这似乎是在数学知通常的功能组成:为什么在Haskell中需要花括号为'neg square 4.2'?
f ∘ g
我想确保我的理解正确无误,并创造了这个例子:
square x = x*x
neg x = (-1)*x
main = do
-- let result = neg (square 4.1) -- works
-- let result = square (neg 4.2) -- works
-- let result = neg $ square 4.3 -- works
let result = neg square 4.4 -- doesn't work
-- let result = neg . square 4.5 -- doesn't work
-- let result = neg . square $ 4.6 -- works
-- let result = neg square $ 4.7 -- does not work
print result
可悲的是,只有前三行工作(至少他们按预期工作)。
为什么我需要在较低2案件括号?我以为你不会需要他们,becasue我认为用点,neg
得到square
作为输入。所以它仍然是一个函数,看起来像
(-1)*x*(-1)*x
然后4.4摆在那里了x
这应该是罚款。
我认为没有点,Haskell首先应用square
到4.5,然后neg
应用于结果。
但显然是有问题的。下面两种情况下的问题是什么?
由于'infixr'指定了'.','$'(以及函数应用暗示)的优先级,'neg。平方4.5 ==(。)(neg)(square 4.5)','neg。方$ 4.6 ==($)((。)(NEG)(平方))(4.6)'和'负方$ 4.7 ==($)(NEG(广场))(4.7)' –