+1和-1之间的差异

时间:2011-03-06 11:26:09

标签: function haskell operators prefix

> :t (+1)
(+1) :: Num a => a -> a

> :t (-1)
(-1) :: Num a => a

为什么第二个不是功能?我必须写(+(-1))还是有更好的方法?

3 个答案:

答案 0 :(得分:9)

这是因为(-1)被解释为否定值,但(+1)被解释为curried函数(\x->1+x)

在haskell中,(a **)(**) a的语法糖,而(** a)(\x -> x ** a)。但是(-)是一种特殊情况,因为它既是一元运算符(negate)又是二元运算符(减号)。因此,这种语法糖不能在这里明确地应用。如果您需要(\x -> a - x),可以撰写(-) a,并且如Currying subtraction中已经回答的那样,您可以使用negatesubtract函数来消除一元之间的歧义和二进制-函数。

答案 1 :(得分:6)

  

我必须写(+( - 1))还是有更好的方法?

我刚刚找到了一个名为subtract的函数,所以我也可以说subtract 1。我觉得这很可读: - )

答案 2 :(得分:1)

其他人已经注意到,{p> (-1)是否定的。减去一个函数是\x -> x-1flip (-) 1或者(+ (-1))

-被视为expression grammar中的特例。 +不是,可能是因为积极的文字不需要领先加上并允许它会导致更多的混乱。

编辑:我第一次弄错了。 ((-) 1)是“从一个减去”的函数,或(\x -> 1-x)