我们已经定义了以下内容:
const a x = a
现在我的问题: 为什么以下示例中定义的“变量” a 会评估为值为5的数字?
a = const 5 const
因为如果我们看第一部分,即“const 5”,我们会得到一个函数类型的结果。但总的来说,结果是一个数字。为什么?
答案 0 :(得分:5)
它的计算结果为5,因为const
抛弃了它的第二个参数,并且只计算它的第一个参数。第一个参数是5,所以它的评估结果是什么。
因为如果我们看第一部分,即" const 5",我们会得到一个函数类型的结果。
但那并不是所有的代码,而只是关注"第一部分"改变了意义。
如果你只写:
a = const 5
然后a
将成为一项功能,因为您只是部分应用了const
。但实际上,您将const
作为第二个参数传递给const
,完全应用该函数,并允许它进行评估。
答案 1 :(得分:2)
您定义:
const a x = a
这是简短的:
const = (\a -> (\x -> a))
所以一个函数(带有一个参数a
)导致一个函数(同样有一个参数x
)映射到a
。
现在,如果我们这样写:
const 5 const
我们暗中写道:
(const 5) const
如果我们计算出第一个const
,我们会看到:
((\a -> (\x -> a)) 5) const
-> (\x -> 5) const
-> 5
所以你对const
的定义只是忽略第二个参数。无论它是什么(函数,数字,字符等),它将返回第一个参数(此处为5
),而5
具有类型Num a => a
(它可以通过任何数字类型)。
如果你写了const 5
,你会得到:
const 5
-> (\a -> (\x -> a)) 5
-> (\x -> 5)
这是一个接受任何类型输入x
的函数,并将其映射到数字5
。