我正在阅读关于列表的Haskell教程,它声称:
注意在长字符串上重复使用++运算符时...... Haskell必须遍历++左侧的整个列表。 ...但是,使用:运算符(也称为cons运算符)将某些内容放在列表的开头是即时的。
但是,在我看来,事情应该是相反的。
:
必须遍历列表中的所有元素,因为它需要移动所有索引。另一方面,++
可以在列表的末尾附加一个新元素并完成它,因此是即时的。
有什么帮助理解这个陈述?
答案 0 :(得分:5)
Haskell中的列表只是一个单链表。例如,new Date()
的列表可以是Char
,空列表或[]
,其中c : cs
是c
和Char
是cs
的列表。要生成Char
给定c : cs
和c
,所有实现需要做的是分配一个带有标记cs
的标记和指针(:)
的副本, c
。这非常便宜。