为什么在haskell中列表在foldl之后注解了两次?

oyjwcjzk  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

我在试着理解haskell,我真的不能确信这行代码是做什么的,有人能给我详细解释一下这行代码吗?
为什么foldl需要遍历xs列表两次?
该代码是用于冒泡排序算法的。

burbuja xs = foldl (\acc _ -> bsort acc) xs xs
at0kjp5o

at0kjp5o1#

它不会在列表上运行两次,foldl (\x -> f x) xs xs实际上是一种“鬼鬼祟祟”的方式,它应该对xs中的项目重复多次。
实际上,foldl f ys (x:xs)等价于foldl f (f ys x) xs,因此这是一种将f应用于以ys开始并使用列表x的第一项的累加器的机制。但在这里,清单上的项目被删除了。
因此,对于具有 n 个项目的列表xs,它将工作为:

bsort (bsort ((… (bsort xs) …))

其中它因此再次对先前的bsort的结果应用bsort函数多次,因为列表中存在元素。

相关问题