haskell - 使用foldl反转列表?

标签 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]

为什么?

最佳答案

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

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

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

关于haskell - 使用foldl反转列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39929738/

相关文章:

haskell - 检查堆栈目标/组件依赖于哪些目标/组件?

haskell - 拥抱!!部分应用程序错误

haskell - 过滤掉不需要的元组

scala - 函数式编程是否可以减少冯·诺依曼瓶颈?

haskell - 如何使用 putStrLn 进行跟踪(Haskell)

检查四叉树水平对称性的算法?

haskell - 如何重构 Haskell 数据类型中的重复字段名称?

haskell - 使用 lens 向嵌套 Map 添加键和值

haskell - 图中的可达节点

Haskell uniq -c 模拟器代码解释