Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:函数和值_Haskell - Fatal编程技术网

Haskell:函数和值

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),该函数没有意义,并给出类型错误 想象一

我是Haskell的初学者,对Haskell中函数的定义有问题。 值是Haskell中的函数,对吗? (+3)3=6但是(+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
a
Num
实例。也就是说,如果你对定义感兴趣,你应该看看Haskell报告。const x y=x negate x=-x我们应该计算const const(negate1)(negate2)3在第一步我的导师计算const const(negate1)到constbut@EugeneSh. 你有没有想过在学习之前你的思维状态是怎样的?也许当你在写教材的时候。我有,这些问题让我看到了我过去的一点点。不管怎么说,这是一个有效的问题,那么为什么不让搜索引擎来决定这个问题的相关性/正确性呢。@LayGonzález在学习一些东西之前,正确的思维状态应该是好奇心。我想我们这里有。但是接下来是学习技能,它可以自己学习。第一个学习技能应该是:第一件事。什么?请先阅读。
(+3)(+3)
不起作用,除非您已经创建了
a->a
a
Num
实例。也就是说,如果你对定义感兴趣,你应该看看Haskell报告。const x y=x negate x=-x我们应该在我的导师计算的第一步计算const const(negate1)(negate2)3