使用foldl反转列表?

时间:2016-10-08 07:10:25

标签: haskell

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]

为什么?

1 个答案:

答案 0 :(得分:5)

Haskell中的Foldl与for循环的工作方式类似:

acc = []
for each x in xs:
    acc = (x:[])
return acc

由于您用于更新acc的步骤不依赖于先前的值,因此最终结果将仅依赖于列表的最后一个元素(或将是{{1的初始值)如果列表为空,则为。)