> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
为什么第二个不是函数?我必须写(+(-1))还是有更好的方法?
这是因为(-1)被解释为负数,但(+1)被解释为柯里化函数(\x->1+x)。
在 haskell 中,是, 和is(a **)的语法糖。然而,这是一种特殊情况,因为它既是一元运算符(否定)又是二元运算符(减号)。因此,这种语法糖不能在这里明确应用。当您需要时,您可以编写,并且正如在Currying subtraction中已经回答的那样,您可以使用函数和消除一元函数和二元 函数之间的歧义。(**) a(** a)(\x -> x ** a)(-)(\x -> a - x)(-) anegatesubtract-
我必须写 (+(-1)) 还是有更好的方法?
我刚刚找到了一个叫函数subtract,所以我也可以这样说subtract 1。我觉得这很可读:-)
(-1)正如其他人所指出的那样,是负面的。减一函数是\x -> x-1,flip (-) 1或者确实(+ (-1))。
-在表达式语法中被视为特殊情况。+不是,大概是因为正面文字不需要前导加号,并且允许它会导致更多的混乱。
编辑:我第一次弄错了。((-) 1)是函数“减一”,或(\x -> 1-x)。