使用foldl反转列表?

Cpc*_* Cp 2 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]
Run Code Online (Sandbox Code Playgroud)

如果我改变acc[]

reverse' xs=foldl (\acc x -> x:[]) [] xs
Run Code Online (Sandbox Code Playgroud)

它输出

[5]
Run Code Online (Sandbox Code Playgroud)

为什么?

hug*_*omg 5

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

acc = []
for each x in xs:
    acc = (x:[])
return acc
Run Code Online (Sandbox Code Playgroud)

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