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
的初始值)。