如何理解这个Haskell程序的执行?

时间:2017-02-12 04:46:25

标签: haskell functional-programming

当我在Haskell学习foldr函数时,我遇到了这个程序,我无法弄清楚它是如何执行的。

mylength :: [Int] -> Int
mylength l = foldr f 0 l
  where 
    f x y = y + 1

1 个答案:

答案 0 :(得分:2)

当您使用数字列表调用此函数时,将执行此功能。 myLength [1,2,3]应该返回3

foldr有三个参数。第一个是函数:这里是f。第二个是起始值,与您希望整个事物返回的类型相同。最后一个参数是你要折叠的列表。

foldr像这样工作(有点):函数f将被调用列表的每个元素,最后一个元素。第一次,它被称为列表的最后一个元素0,返回1。然后使用列表中倒数第二个元素和1(前一个调用的结果)调用它。所以每次f的结果是到目前为止列表的长度。当列表中没有任何内容时,它将返回到目前为止累积的值(列表的长度)。

一个很好的练习是尝试使用递归定义自己编写折叠。这可能有助于您更好地理解它。