gpt4 book ai didi

haskell - 为什么这个表达式中的一元减号运算符有问题 : (- 2) 1?

转载 作者:行者123 更新时间:2023-12-04 18:05:41 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Prefix form of unary operator in Haskell

(4 个回答)


7年前关闭。




以下所有表达式都会被评估而不会发生意外:

(+2) 1 -- 3
(*2) 1 -- 2
((-)2) 1 -- 1
(2-) 1 -- 1
(/2) 1 -- 0.5
(2/) 1 -- 2.0

但不是这个:

(-2) 1 -- the inferred type is ambiguous

GHC 抛出一些关于推断类型不明确的错误。为什么?

最佳答案

前六个带括号的表达式是部分,即接受一个参数并“将其放在中缀运算符缺失的一侧”的函数(参见 haskell.org wiki )。相比之下,(-2) is,不是一个函数,而是一个数字(负 2):

λ> :t (-2)
(-2) :: Num a => a
如果你写
λ> (-2) 1
您似乎正在尝试申请 (-2) (一个数字)到 1 (这是不可能的),GHCi 理所当然地提示:
Could not deduce (Num (a0 -> t))
arising from the ambiguity check for ‘it’
from the context (Num (a -> t), Num a)
bound by the inferred type for ‘it’: (Num (a -> t), Num a) => t
at <interactive>:3:1-6
The type variable ‘a0’ is ambiguous
When checking that ‘it’
has the inferred type ‘forall a t. (Num (a -> t), Num a) => t’
Probable cause: the inferred type is ambiguous
如果你想要一个减去 2 的函数从另一个号码,你可以使用
(subtract 2)
比较它的类型,
λ> :t (subtract 2)
(subtract 2) :: Num a => a -> a
(-2) (看上面)。

术语附录(在 OP 编辑​​之后)
给减号运算符加上括号会将其变成一个带有两个参数的普通(前缀)函数;因此 ((-) 2)不是一个部分,而是一个部分应用的功能。

关于haskell - 为什么这个表达式中的一元减号运算符有问题 : (- 2) 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com