繁体   English   中英

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

[英]Haskell ~ Does last iterate the entire list?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM