撤消列表,评估顺序

时间:2014-07-21 18:44:14

标签: haskell

enter image description here

我正在阅读Haskell School of Expression的第69页,我不确定我是否正确评估rev [1:2:3:4]

Hudak没有在他的reverse书中详细解释评估(重写)顺序。

有人可以确认我的猜测(如附图所示)是正确的,或者如果不正确,请指出我的错误。我认为这是正确的,但我不是百分百肯定,这是要求的原因。

所以问题是:

当我评估reverse的一步然后进行评估(即重写)时,结果应该用括号括起来,对吗?

如果我理解正确,这些不完整的括号表示是reverse的差(读二次)时间复杂度的原因。在这个例子中,为了反转4个元素列表,总共花费了6个步骤来追加列表。

1 个答案:

答案 0 :(得分:3)

是的,嵌套的左关联调用追加(在Haskell中,名称为(++)(<>))会导致单链表的性能不佳。

这个问题有几种解决方案,因为它至少已知30年或40年。我相信reverse的库版本使用累加器来实现线性复杂度而不是二次方,但它仍然不是你想在列表上经常调用的东西。