Clojure rseq 恒定时间?

标签 clojure

我在实用 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/

相关文章:

clojure - 在 clojure 中获取惰性序列的第一个元素的惯用方法

javascript - 将 Clojurescript 线程优先宏与 Javascript Interop 结合使用

clojure - 在 Clojure 中测试 "self-evaluating"原子的单个谓词

clojure - 如何从嵌套列表中删除元素?

clojure - 如何将此代码从 common lisp 翻译为 clojure

clojure - 在 Clojure 中创建 Java 类的选项

scala - 为什么 clojure 在 alioth 基准测试中的表现比 scala 差

clojure - 如何在 clojure 中交换深层嵌套向量中的所有元素对?

html - 如何在 Enlive 中对更复杂的 HTML 片段使用选择器否定(但是...)?

clojure - 在 Clojure 中编译 - Redis/Carmine