+1和-1之间的差异

fre*_*low 13 haskell function operators prefix

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

> :t (-1)
(-1) :: Num a => a
Run Code Online (Sandbox Code Playgroud)

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

Has*_*ant 9

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

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

  • "否定是Haskell中唯一的前缀运算符"http://www.haskell.org/onlinereport/exps.html (5认同)

fre*_*low 6

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

我刚刚发现了一个叫做的函数subtract,所以我也可以说subtract 1.我发现这很可读:-)