我在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