簡體   English   中英

`foldr` 和 `foldl` 的定義中使用了哪些類型的遞歸?

[英]What kinds of recursions are used in the definitions of `foldr` and `foldl`?

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的定義中使用了哪些遞歸?

謝謝。

foldl使用尾遞歸。

foldr使用受保護的遞歸,遞歸由f的懶惰(如果有)保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM