> :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)
(-) a
negate
subtract
-
我必须写 (+(-1)) 还是有更好的方法?
我刚刚找到了一个叫函数subtract
,所以我也可以这样说subtract 1
。我觉得这很可读:-)
(-1)
正如其他人所指出的那样,是负面的。减一函数是\x -> x-1
,flip (-) 1
或者确实(+ (-1))
。
-
在表达式语法中被视为特殊情况。+
不是,大概是因为正面文字不需要前导加号,并且允许它会导致更多的混乱。
编辑:我第一次弄错了。((-) 1)
是函数“减一”,或(\x -> 1-x)
。