2010-07-21 89 views
1

這些行執行正確:

Prelude> 1/(1 + 1) 
0.5 
Prelude> (/) 1 $ (+) 1 1 
0.5 
Prelude> (/) 1 $ 1 + 1 
0.5 

這一個不:

Prelude> 1/$ (+) 1 1 

<interactive>:1:4: parse error on input `$' 

爲什麼?

+4

您可以使用運算符「節」來執行此操作:'(1 /)$(+)1 1'。 – 2010-07-21 13:38:39

回答

15

/是一箇中綴操作符。它需要有效的表達。 1是一個文字,因此是一個有效的表達。但是,在右側,您立即有另一箇中綴運算符,它需要在另一個有效表達式之前(並且1 /不是有效的表達式,因爲它缺少/運算符的右側參數)。這就是解析器報告錯誤的原因(無效語法 - 請參閱haskell報告以獲得難看的細節;)

1

我認爲這是因爲$是一個運算符,它需要一個前面的函數。上例中的1 /表達式不計算爲函數。在這種情況下,解析器期望找到(數字)表達式作爲/運算符的第二個參數。

+1

你描述的是一個語義解釋,而ghci返回解析器錯誤 - 這是一個語法錯誤。 (注意:我不認爲該代碼應該起作用;) – 2010-07-21 13:47:24