2010-07-21 83 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