我正在尝试更深入地了解功能思维并寻找练习的解决方案(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)正在经历什么吗?我尝试研究(const id)
在 SO 和 Hoogle 中,但无法理解它的意义。有人能帮我了解一下这里发生的事情吗?
const
and id
是两个独立的函数,您可以在 Google 上查找。也许在那之后你可以自己回答你的问题,但无论如何我都会回答。
const
是一个有两个参数的函数,总是返回其第一个参数。id
是一个只有一个参数且始终返回其参数的函数。
所以(const id)
是一个总是返回一个参数的函数id
,或者换句话说,一个总是返回第二个参数的两个参数的函数。
Now foldr1
接受两个参数的函数f elem accum
作为第一个参数,并将其从最后一个元素开始按顺序应用于列表(将其用作累加器的初始值)。在我们的例子中f
总是会返回第二个参数,所以无论如何accum
使用(列表的最后一个元素)初始化,它将在所有迭代中保持不变并返回。
现在你可以使用seq
代替(const id)
, but seq
并不懒惰。或者你可以使用last
无需编写自己的函数:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)