使用foldl反转列表


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]

为什么?

Foldl在Haskell中的工作原理类似于for循环:

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

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

最新更新