Haskell~最后迭代整个列表吗?

时间:2010-12-06 17:50:07

标签: list haskell

Haskellites的简单问题:Haskell是否迭代整个序列以获得最后一个值?具体来说,是否为这两个表达式执行了不同数量的指令?

Prelude> last "asdf"
'f'
Prelude> last "qwerty"
'y'

3 个答案:

答案 0 :(得分:19)

是的,Haskell的列表是单链接的,因此last需要遍历整个列表,使其运行时O(n)

答案 1 :(得分:7)

除了sepp2k所说的,这很容易确定:只需运行“last [1..1000000000]”并查看是否需要一段时间。正如所料,它确实如此。

答案 2 :(得分:3)

正如其他两个答案所说:是的,最后是标准列表上的O(n)操作。如果您正在处理文本数据,可以考虑使用提供O(1)text packagelast function。如果你处理文本数据,你可以查看bytestring或vector包。