我在实用 Clojure(第 5 章)中读到,rseq
函数操作在恒定时间内执行。在我看来,这应该是一个线性时间操作。谁能帮我解释一下这个问题吗?
最佳答案
试试这个:
(类 [1 2 3 4])
你会看到:
clojure.lang.PersistentVector
现在试试这个:
(class (rseq [1 2 3 4]))
并且序列实现不同:
clojure.lang.APercientVector$RSeq
正如 Roman 所说,它是序列的更改接口(interface)。所有元素都位于原来的位置,您只是以相反的顺序访问它们。
您可以查看 RSeq
类来了解它是如何实现的:https://github.com/clojure/clojure/blob/b578c69d7480f621841ebcafdfa98e33fcb765f6/src/jvm/clojure/lang/APersistentVector.java
关于Clojure rseq 恒定时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462207/