我正在阅读Practical Clojure(第5章),rseq函数操作在恒定时间内执行.在我看来,它应该是线性时间操作.任何人都可以为我阐明这一点吗?
Gor*_*vic 12
试试这个:
(class [1 2 3 4])
你会看到的:
clojure.lang.PersistentVector
现在试试这个:
(class (rseq [1 2 3 4]))
顺序实现是不同的:
clojure.lang.APersistentVector$RSeq
正如Roman所说,它是一个改变了序列的接口.所有元素都是他们只是以相反的顺序访问它们的地方.
您可以RSeq在此处查看类以了解它是如何实现的:https://github.com/clojure/clojure/blob/b578c69d7480f621841ebcafdfa98e33fcb765f6/src/jvm/clojure/lang/APersistentVector.java