为什么要立即预先列出一个列表?

时间:2015-11-13 23:10:27

标签: haskell

我正在阅读关于列表的Haskell教程,它声称:

  

注意在长字符串上重复使用++运算符时...... Haskell必须遍历++左侧的整个列表。 ...但是,使用:运算符(也称为cons运算符)将某些内容放在列表的开头是即时的。

但是,在我看来,事情应该是相反的。

:必须遍历列表中的所有元素,因为它需要移动所有索引。另一方面,++可以在列表的末尾附加一个新元素并完成它,因此是即时的。

有什么帮助理解这个陈述?

1 个答案:

答案 0 :(得分:5)

Haskell中的列表只是一个单链表。例如,new Date()的列表可以是Char,空列表或[],其中c : cscCharcs的列表。要生成Char给定c : csc,所有实现需要做的是分配一个带有标记cs的标记和指针(:)的副本, c。这非常便宜。