這些行執行正確:
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 `$'
爲什麼?
這些行執行正確:
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 `$'
爲什麼?
/是一箇中綴操作符。它需要有效的表達。 1
是一個文字,因此是一個有效的表達。但是,在右側,您立即有另一箇中綴運算符,它需要在另一個有效表達式之前(並且1 /
不是有效的表達式,因爲它缺少/運算符的右側參數)。這就是解析器報告錯誤的原因(無效語法 - 請參閱haskell報告以獲得難看的細節;)
我認爲這是因爲$
是一個運算符,它需要一個前面的函數。上例中的1 /
表達式不計算爲函數。在這種情況下,解析器期望找到(數字)表達式作爲/
運算符的第二個參數。
你描述的是一個語義解釋,而ghci返回解析器錯誤 - 這是一個語法錯誤。 (注意:我不認爲該代碼應該起作用;) – 2010-07-21 13:47:24
您可以使用運算符「節」來執行此操作:'(1 /)$(+)1 1'。 – 2010-07-21 13:38:39