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
具有typeNum a=>a
(它可以通过任何数字类型)
但是,如果您编写了const 5
,您将获得:
const 5
-> (\a -> (\x -> a)) 5
-> (\x -> 5)
这是一个函数,它接受任何类型的输入x
,并将其映射到一个数字5
如果我们查看(+)1
,就会得到一个函数类型的结果。但是作为一个整体,(+)11
是一个数字。为什么?