这个函数如何等同于获取列表中的最后一项?

Cor*_*ein 8 haskell

在完成99个问题练习中的第一个问题(" 查找列表的最后一个元素 ")后,我想看看我的解决方案与其他问题的比较,我找到了这个解决方案.

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

这个文档似乎表明它foldr1有两个参数,第一个是函数,第二个是列表.但是这个定义似乎只是作为一个参数.是否有像这样传递的参数的隐式定义?

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

我已经看过了的定义foldr1,const以及id,但我有一个很难理解如何将这些三项工作一起返回列表中的最后一项.

mip*_*adi 6

你是完全正确的.在Haskell中,一个带有两个参数的函数实际上可以被视为一个函数,它接受一个参数并返回另一个带参数的函数; 这被称为currying.请注意,函数签名foldr1是:

(a -> a -> a) -> [a] -> a
Run Code Online (Sandbox Code Playgroud)

虽然我们经常将其视为"将函数和列表作为参数并返回值的函数",但它实际上是"将函数作为参数并返回接受列表并返回值的函数的函数" .