2014-12-21 129 views
2

Haskell新手在這裏。我在玩這個表達式:Haskell函數替換括號

"The sum of 3 and 4 is " ++ (show (3 + 4)) 

其中評估罰款。這也是罰款:

"The sum of 3 and 4 is " ++ (show $ 3 + 4) 

但我得到一個「解析錯誤輸入$」當我$取代最後一對括號:

"The sum of 3 and 4 is " ++ $ show $ 3 + 4 

,我真的不知道爲什麼。我正在關注的LearnYouAHaskell series它說:

「 $是那種寫一個開放的括號內 然後在表達式的最右側寫關閉一個相當於」

我錯過了什麼?

+3

您是否在尋找'(++) 「的3和4的總和爲」 $顯示$ 3 + 4'? – Shanthakumar

+1

是的,這個作品,謝謝!我想知道爲什麼它不適用於++的中綴使用? – xdl

+9

@xdl你不能有兩個相鄰的中綴運算符,它沒有很好的定義。 '1 + * 2'會是什麼?你甚至會怎麼解釋? ''''運算符在Haskell中沒有什麼特別之處,它是一個與其他運算符一樣定義的運算符。它的優先級很低,並且與右側相關聯。 – bheklilr

回答

3

部分應用的中綴運算符需要括在括號內。所以:

"The sum of 3 and 4 is " ++ $ show $ 3 + 4 

失敗,但...

("The sum of 3 and 4 is " ++) $ show $ 3 + 4 

的作品就好了。請注意,您也可以使用(.)功能組成的功能,像這樣:

("The sum of 3 and 4 is " ++) . show $ 3 + 4 

...但那是以後的學習,你-A-哈斯克爾。

而且,@Shanthakumar發佈,可能需要做這種方式:

(++) "The sum of 3 and 4 is " $ show $ 3 + 4