代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

“foldr”和“foldl”的定义中使用了哪些递归?

  •  0
  • Tim unnamed eng  · 技术社区  · 5 年前
    foldr   ::  (a  ->  b   ->  b)  ->  b   ->  [a] ->  b
    foldr   f   v   [] =    v
    foldr   f   v   (x:xs)  =   f   x   (foldr  f   v   xs)
    

    foldl   ::  (a  ->  b   ->  a)  ->  a   ->  [b] ->  a
    foldl   f   v   [] =    v
    foldl   f   v   (x:xs)  =   foldl   f   (f  v   x)  xs
    

    似乎使用了不同类型的递归。

    在定义 foldr foldl ?

    谢谢。

    0 回复  |  直到 5 年前
        1
  •  3
  •   Will Ness Derri Leahy    5 年前

    foldl 使用尾部递归。

    foldr 使用 保护递归 ,递归由 f 懒惰(如果有的话)。