这些行执行正确:
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