我在Practical Clojure(第5章)中读到rseq
函数操作在恒定时间执行。在我看来,这应该是一个线性时间操作。任何人都可以为我阐明这一点吗?Clojure rseq在恒定时间?
6
A
回答
12
试试这个:
(class [1 2 3 4])
你会看到:
clojure.lang.PersistentVector
现在试试这个:
(class (rseq [1 2 3 4]))
和顺序小鬼lementation是不同的:
clojure.lang.APersistentVector$RSeq
正如罗曼说,这是一个改变接口的序列。所有的元素都是他们所在的地方,你只是以相反的顺序访问它们。
你可以看到RSeq
类,看看它是如何在这里实现:https://github.com/clojure/clojure/blob/b578c69d7480f621841ebcafdfa98e33fcb765f6/src/jvm/clojure/lang/APersistentVector.java
3
我不知道它是如何实现的,但我认为它只是返回一些实现序列接口的对象,并知道如何以相反的顺序遍历结构(向量或有序映射)。结果序列是懒惰的,所以它不必立即遍历整个结构。
0
它返回新界面在固定时间内像戈兰约维奇说,但打印出来是线性的。因此,在REPL中显示它是线性的,但将其置于def是恒定的。
相关问题
- 1. 值的恒定时间分组
- 2. 在Python中以恒定时间更新字典
- 3. 关于恒定时器和加速时间和错误
- 4. 如何找到发生在线性时间和恒定的空间
- 5. 在Clojure中将即时时间转换为Joda时间
- 6. 永恒的加载时间与ASP.NET
- 7. C中的恒星时间计算
- 8. Titan如何使用HBase/Cassandra实现恒定时间查找?
- 9. 为什么hashmap查找是O(1)即恒定时间?
- 10. 内存访问不是恒定的时间
- 11. 数组访问总是恒定时间/ O(1)?
- 12. 具有邻接列表的恒定时间操作
- 13. 是否arr = [val] * N具有班轮或恒定时间?
- 14. 恒定时间级联计算可能吗?
- 15. 带有〜100万个键的HashMap,仍然是恒定时间?
- 16. 以恒定精度格式化时间戳
- 17. 用于C++的矢量的恒定时间交换逻辑STL
- 18. 范围内的恒定时间随机数
- 19. CUDA 8.0 - cudaMemcpy() - 线性或恒定时间操作?
- 20. 每个节点都有恒定时间的C++树
- 21. Box2D(Cocos2D)随着时间的推移恒定的力量
- 22. 遍历的访问时间经由恒定长度的阵列
- 23. 减去恒定
- 24. 顶级恒定
- 25. PHP恒约定
- 26. Clojure中的定时素数
- 27. 如何排序的ASCII字符线性时间和恒定的空间
- 28. 速度恒定,同时还能冲动
- 29. 如何在恒定时间比较列表中的两个元素
- 30. 恒定太大C++
非常感谢!这就说得通了。 – 2010-12-16 16:06:59