这个函数中(const id)的目的是什么?

时间:2013-09-08 04:13:24

标签: haskell

我正在努力深入了解功能性思维并寻找练习解决方案(99个问题)。

第一个问题是创建一个返回列表最后一个元素的函数。

我看到了解决方案:

myLast = foldr1 (const id)

我了解foldr1将函数f应用于列表l

所以,如果我把它插入一个例子:

myLast [1,2,3,4,5,6,7]

哪个会被“翻译成”

foldr1 (const id) [1,2,3,4,5,6,7]

有人可以向我解释这个(const id)是如何逐步完成的。我尝试在SO和Hoogle中研究(const id),但对它没有多大意义。有人会帮我介绍一下这里发生的事情吗?

1 个答案:

答案 0 :(得分:7)

constid是两个独立的功能,您可以在Hoogle上查找。也许在那之后你可以自己回答你的问题,但无论如何我都会回答。

const是两个参数的函数,它总是返回其第一个参数。 id是一个始终返回其参数的参数的函数。

因此(const id)是一个始终返回id的参数的函数,换句话说,是两个始终返回其第二个参数的参数的函数。

现在foldr1接受两个参数f elem accum的函数作为第一个参数,并从最后一个元素(使用它作为累加器的初始值)开始按顺序应用到列表中。在我们的例子中,f将始终返回其第二个参数,因此无论accum初始化为(列表的最后一个元素),它将在所有迭代中保持不变并将返回。

现在您可以使用seq代替(const id),但seq并非懒惰。或者您可以在不编写自己的函数的情况下使用last:)