Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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中const函数的const函数_Haskell - Fatal编程技术网

haskell中const函数的const函数

haskell中const函数的const函数,haskell,Haskell,我们定义了以下内容: const a x = a 现在我的问题是: 为什么以下示例中定义的“变量”a作为值为5的数字进行计算 a = const 5 const 因为如果我们看第一部分,即“常数5”,我们会得到一个函数类型的结果。但总的来说,结果是一个数字。为什么?它计算为5,因为const丢弃了它的第二个参数,而只计算为它的第一个参数。第一个参数是5,这就是它的计算结果 因为如果我们看第一部分,即“常数5”,我们会得到一个函数类型的结果 但这并不是全部代码,只看“第一部分”就可以改变其含义

我们定义了以下内容:

const a x = a
现在我的问题是: 为什么以下示例中定义的“变量”a作为值为5的数字进行计算

a = const 5 const

因为如果我们看第一部分,即“常数5”,我们会得到一个函数类型的结果。但总的来说,结果是一个数字。为什么?

它计算为5,因为
const
丢弃了它的第二个参数,而只计算为它的第一个参数。第一个参数是5,这就是它的计算结果

因为如果我们看第一部分,即“常数5”,我们会得到一个函数类型的结果

但这并不是全部代码,只看“第一部分”就可以改变其含义

如果你只写:

a = const 5
然后
a
将是一个函数,因为您仅部分应用了
const
。但实际上,您正在将
const
作为第二个参数传递给
const
,完全应用函数,并允许它进行计算

您定义:

const a x = a
以下简称:

const = (\a -> (\x -> a))
因此,一个函数(带有一个参数
a
)产生一个映射到
a
的函数(同样带有一个参数
x

如果我们这样写:

const 5 const
我们含蓄地写道:

(const 5) const
如果我们计算出第一个
常数
,我们会看到:

   ((\a -> (\x -> a)) 5) const
-> (\x -> 5) const
-> 5
因此,您对
const
的定义忽略了第二个参数。不管它是什么(函数、数字、字符等),它都将返回第一个参数(此处为
5
),并且
5
具有type
Num a=>a
(它可以通过任何数字类型)

但是,如果您编写了
const 5
,您将获得:

   const 5
-> (\a -> (\x -> a)) 5
-> (\x -> 5)
这是一个函数,它接受任何类型的输入
x
,并将其映射到一个数字
5

如果我们查看
(+)1
,就会得到一个函数类型的结果。但是作为一个整体,
(+)11
是一个数字。为什么?