Ich habe in Practical Clojure (Kapitel 5) gelesen, dass die rseq
Funktionsoperation in konstanter Zeit ausgeführt wird. Es scheint mir, dass es eine lineare Zeitoperation sein sollte. Kann mir das jemand etwas näher bringen?Clojure rseq in konstanter Zeit?
Antwort
Versuchen Sie folgendes:
(class [1 2 3 4])
Sie werden sehen:
clojure.lang.PersistentVector
Nun ist diese versuchen:
(class (rseq [1 2 3 4]))
und die Sequenz imp lementation unterscheidet:
clojure.lang.APersistentVector$RSeq
Roman Wie gesagt, es ist eine geänderte Schnittstelle zu einer Sequenz ist. Alle Elemente sind dort, wo sie waren, Sie greifen nur in umgekehrter Reihenfolge auf sie zu.
können Sie RSeq
-Klasse zu sehen, wie es hier umgesetzt hat: https://github.com/clojure/clojure/blob/b578c69d7480f621841ebcafdfa98e33fcb765f6/src/jvm/clojure/lang/APersistentVector.java
Ich weiß nicht, wie es implementiert ist, aber ich würde denken, dass es nur ein Objekt zurückgibt, das Sequenzschnittstelle implementiert und weiß, wie man die Struktur (Vektor oder sortierte Karte) in umgekehrter Reihenfolge durchläuft. Die Ergebnissequenz ist faul, sodass sie nicht sofort die gesamte Struktur durchlaufen muss.
Es gibt die neue Schnittstelle in konstanter Zeit wie Goran Jovic sagte aber aus linear Druck. Die Darstellung in der REPL ist also linear, aber es ist konstant.
- 1. rseq vs. rückwärts in clojure
- 2. Zusammenführen von zwei Listen in konstanter Zeit in Java
- 3. Finding minumum Element in einem Stapel in konstanter Zeit
- 4. Wie bekomme ich jedes Element in konstanter Zeit?
- 5. NSDate Converting Problem mit konstanter Zeit in schnellen
- 6. Konstanter Wert in Bedingungsausdruck
- 7. Beschleunigen clojure Startup Zeit mit nailgun
- 8. Abfrage durch MongoDB ISODate in Clojure (Monger/clj-Zeit)
- 9. Custom Transit Writer für Joda Zeit in Clojure
- 10. Update zwei Wert zur gleichen Zeit in clojure
- 11. Warum erfolgt der Zugriff auf ein einzelnes Element in einem Array in konstanter Zeit (O (1))?
- 12. Wie finde ich das nächste Bit in einem Gray-Code in konstanter Zeit ändern?
- 13. C++ Kürzungs konstanter Wert
- 14. System.arraycopy mit konstanter Länge
- 15. Vektor mit konstanter Größe
- 16. Wie man Bereich Spleißen in konstanter Zeit mit std :: forward_list tun?
- 17. Wie findet man die Summe der Elemente aus gegebenem Indexintervall (i, j) in konstanter Zeit?
- 18. uninitialized konstanter Capybara (Nameerror) in Schienen app
- 19. Sonarqube nicht konstanter String in SQL-Anweisungen
- 20. Get ein konstanter rps in Jmeter
- 21. Konstanter Wert in Scala Wiedergabe JSON Liest
- 22. Flask - generate_password_hash nicht konstanter Ausgang
- 23. Android-Spiel mit konstanter FPS?
- 24. Format Timestamp mit konstanter Genauigkeit
- 25. gesetzt konstanter Elementwert aus Unterklasse
- 26. Fixed-Length-Stack-Struktur in Clojure
- 27. OAuth1 in Clojure
- 28. Tail Call Beseitigung in Clojure?
- 29. Abstraktion von Datenstrukturimplementierungsdetails in Clojure
- 30. Listen in Clojure sortieren
Vielen Dank! Das macht Sinn. –