【问题标题】:What kinds of recursions are used in the definitions of `foldr` and `foldl`?`foldr` 和 `foldl` 的定义中使用了哪些类型的递归?
【发布时间】:2019-12-06 08:49:09
【问题描述】:
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

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

foldrfoldl的定义中用到了哪些递归?

谢谢。

【问题讨论】:

  • 你能描述一下你所说的“递归”是什么意思吗?
  • 我想我知道:非尾和尾递归。
  • 确实有一个是尾递归的,一个不是尾递归的。是否有您正在使用的尾递归的描述?如果是这样,您了解其中的哪些部分,您不了解其中的哪些部分?提供此类信息有助于我们以帮助您更好理解的方式回答问题。尽可能提供更多这样的信息(尤其是这样的定义以及您对这些定义的了解和不了解)。

标签: haskell recursion fold


【解决方案1】:

foldl 使用尾递归。

foldr 使用受保护的递归,递归受到f 的惰性(如果有的话)的保护。

【讨论】:

    猜你喜欢
    • 2016-11-05
    • 2010-09-27
    • 2019-04-03
    • 2021-06-05
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多