Haskell:函数和值
我是Haskell的初学者,对Haskell中函数的定义有问题。 值是Haskell中的函数,对吗? (+3)3=6但是(+3)(+3)是什么意思呢。 (+3)算作一个值吗?Haskell:函数和值,haskell,Haskell,我是Haskell的初学者,对Haskell中函数的定义有问题。 值是Haskell中的函数,对吗? (+3)3=6但是(+3)(+3)是什么意思呢。 (+3)算作一个值吗?(+3)不是你可能认为的那样。在其他语言中,这意味着数值为正-3。在Haskell中,它是+运算符的部分应用,是一个接受一个参数(另一个要添加的数字)的函数。它给任何东西加上三个。因此,(+3)x是函数(+3)对值x的应用,并返回x+3。但是,(+3)(+3)尝试将3添加到函数(+3),该函数没有意义,并给出类型错误 想象一
(+3)
不是你可能认为的那样。在其他语言中,这意味着数值为正-3。在Haskell中,它是+
运算符的部分应用,是一个接受一个参数(另一个要添加的数字)的函数。它给任何东西加上三个。因此,(+3)x
是函数(+3)
对值x
的应用,并返回x+3
。但是,(+3)
(+3)
尝试将3
添加到函数(+3)
,该函数没有意义,并给出类型错误
想象一下用名为plus
的常规函数替换+
,可能会有所帮助:
plus x y = y + x
然后,(+3)
相当于加3
,(+3)3
相当于(加3)3
,与加3
相同。然而,(+3)(+3)
相当于(加3)(加3)
或加3(加3)
,这是没有意义的
您可能需要考虑一下(+3)是什么。(+3)
表示。这个函数将两个加三的应用程序链接在一起,是一个加六的单参数函数。(+3)
不是您可能认为的那样。在其他语言中,这意味着数值为正-3。在Haskell中,它是+
运算符的部分应用,是一个接受一个参数(另一个要添加的数字)的函数。它给任何东西加上三个。因此,(+3)x
是函数(+3)
对值x
的应用,并返回x+3
。但是,(+3)
(+3)
尝试将3
添加到函数(+3)
,该函数没有意义,并给出类型错误
想象一下用名为plus
的常规函数替换+
,可能会有所帮助:
plus x y = y + x
然后,(+3)
相当于加3
,(+3)3
相当于(加3)3
,与加3
相同。然而,(+3)(+3)
相当于(加3)(加3)
或加3(加3)
,这是没有意义的
您可能需要考虑一下(+3)是什么。(+3)
表示。它将两个加三的应用程序链接在一起,是一个加六的单参数函数。(+3)(+3)
只是一个类型错误,因此它不会编译
(+3)
的类型是Int->Int
,这意味着当应用Int
时,我们会得到另一个Int
。这还意味着只能应用Int
类型的值强>
因此,您不能应用于(+3)
类型为Int->Int
的值,只能应用类型为Int
的值
因此,是的,(+3)
是值,但不是将其应用于需要类型为Int
的函数的正确类型
Int
不能与Int->Int
统一,因为它们具有不同的类型构造函数,这使得它们具有不同的类型,正如@DanielWagner所指出的。Int->Int
的最外层构造函数是->
,而Int
的最外层构造函数只是Int
。两种类型有不同的最外层构造函数就足够了,因为它们是不同的。(+3)(+3)
只是一个类型错误,因此它不会编译
(+3)
的类型是Int->Int
,这意味着当应用Int
时,我们会得到另一个Int
。这还意味着只能应用Int
类型的值强>
因此,您不能应用于(+3)
类型为Int->Int
的值,只能应用类型为Int
的值
因此,是的,(+3)
是值,但不是将其应用于需要类型为Int
的函数的正确类型
Int
不能与Int->Int
统一,因为它们具有不同的类型构造函数,这使得它们具有不同的类型,正如@DanielWagner所指出的。Int->Int
的最外层构造函数是->
,而Int
的最外层构造函数只是Int
。两种类型有不同的最外层构造函数就足够了,因为它们是不同的。什么?请先阅读。(+3)(+3)
不起作用,除非您已经创建了a->a
aNum
实例。也就是说,如果你对定义感兴趣,你应该看看Haskell报告。const x y=x negate x=-x我们应该计算const const(negate1)(negate2)3在第一步我的导师计算const const(negate1)到constbut@EugeneSh. 你有没有想过在学习之前你的思维状态是怎样的?也许当你在写教材的时候。我有,这些问题让我看到了我过去的一点点。不管怎么说,这是一个有效的问题,那么为什么不让搜索引擎来决定这个问题的相关性/正确性呢。@LayGonzález在学习一些东西之前,正确的思维状态应该是好奇心。我想我们这里有。但是接下来是学习技能,它可以自己学习。第一个学习技能应该是:第一件事。什么?请先阅读。(+3)(+3)
不起作用,除非您已经创建了a->a
aNum
实例。也就是说,如果你对定义感兴趣,你应该看看Haskell报告。const x y=x negate x=-x我们应该在我的导师计算的第一步计算const const(negate1)(negate2)3