有点像 Haskell 新手的问题,但我在 Haskell 的教程示例中遇到了这个示例。对于“查找列表的最后一个元素”,有一些明显的版本,比如
last' [x] = x
last' (_:xs) = last' xs
但我无法理解呈现的替代版本:
myLast' = foldr1 (const id)
因此,为了理解 id 函数的应用程序在做什么,我在 ghci 中进行了尝试:
const id 1 2 -> gives 2
这像这样绑定:
(const id) 1 2 -> gives 2
而不是这样:
const (id 1) 2 -> gives 1
但我不明白这一点。(const id)
应该翻译成类似的东西
`(\x y->x) (\x->x)`
这不应该返回一个简单地返回其第一个元素的 id 的函数吗?或者,函数顺序生成 (const id) 的行为与 const 有何不同?