reverse'::[a] -> [a]
reverse' xs=foldl (\acc x -> x:acc) [] xs
example:
reverse' [1,2,3,4,5]
output:[5,4,3,2,1]
如果我更改[]
的acc
reverse' xs=foldl (\acc x -> x:[]) [] xs
它输出
[5]
为什么?
最佳答案
Haskell 中的 Foldl 工作方式与 for 循环类似:
acc = []
for each x in xs:
acc = (x:[])
return acc
由于您用于更新 acc
的步骤不依赖于先前的值,因此最终结果仅取决于列表的最后一个元素(或者将是初始值) acc
,如果列表为空)。
关于haskell - 使用foldl反转列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929738/