haskell中const函数的const函数

时间:2017-10-03 17:10:15

标签: haskell

我们已经定义了以下内容:

const a x = a

现在我的问题: 为什么以下示例中定义的“变量” a 会评估为值为5的数字

a = const 5 const

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

2 个答案:

答案 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