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

kea*_*ist 3 haskell

我正在努力深入研究功能性思维,并通过练习解决方案(99个问题).

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

我看到了解决方案:

myLast = foldr1 (const id)
Run Code Online (Sandbox Code Playgroud)

据我所知,foldr1将一个函数应用于f列表l

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

myLast [1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

哪个会被"翻译成"

foldr1 (const id) [1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

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

fja*_*rri 7

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

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

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

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

现在你可以使用seq而不是(const id),但seq不是懒惰.或者您可以在last不编写自己的函数的情况下使用:)