我目前正在學習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)' –