Estaba leyendo en Practical Clojure (Capítulo 5) que la operación de la función rseq
se ejecuta en tiempo constante. Me parece que debe ser una operación de tiempo lineal. ¿Alguien puede arrojar algo de luz sobre esto para mí?Clojure rseq en tiempo constante?
Respuesta
Prueba esto:
(class [1 2 3 4])
Verás:
clojure.lang.PersistentVector
Ahora intente esto:
(class (rseq [1 2 3 4]))
Y la secuencia de imp lementation es diferente:
clojure.lang.APersistentVector$RSeq
Como dijo Romano, que es una interfaz cambiada a una secuencia. Todos los elementos están donde estaban, solo está accediendo a ellos en orden inverso.
Se puede ver RSeq
clase para ver cómo se implementa aquí: https://github.com/clojure/clojure/blob/b578c69d7480f621841ebcafdfa98e33fcb765f6/src/jvm/clojure/lang/APersistentVector.java
No sé cómo se implementa, pero creo que solo devuelve algún objeto que implementa la interfaz de secuencia y sabe cómo recorrer la estructura (vector o mapa ordenado) en orden inverso. La secuencia de resultados es floja, por lo que no tiene que atravesar toda la estructura de inmediato.
devuelve la nueva interfaz en tiempo constante gusta Goran Jovic dijo, sino que se puede imprimir es lineal. Entonces mostrarlo en REPL es lineal, pero ponerlo en def es constante.
- 1. definición constante en Clojure
- 2. Tiempo amortizado constante
- 3. En Clojure, ¿cómo mapearía todo a un valor constante?
- 4. Constantes en tiempo de compilación Clojure
- 5. hash de tiempo constante para cadenas?
- 6. Configuración de Clojure "constantes" en el tiempo de ejecución
- 7. Combinar dos listas en tiempo constante en Java
- 8. Detección constante en tiempo de compilación en C++
- 9. Obteniendo constante constante de recuperación de tiempo constante con listas inmutables en un contexto de programación funcional
- 10. Ordenar primero n enteros en tiempo lineal y espacio constante
- 11. Problema al iterar sobre una serie de tiempo en clojure
- 12. Clojure: Cómo crear una función en tiempo de ejecución
- 13. Constante DateTime en C#
- 14. HashMap con ~ 100 millones de claves, ¿aún tiempo constante?
- 15. ¿Cuál es el equivalente de Clojure de una constante "pública estática final" en Java
- 16. Clojure Lazy Sequences that Vectors
- 17. Clojure en el CLR
- 18. P en constante declaración
- 19. Constante en objetivo-c
- 20. Alfabeto constante en Java?
- 21. puntero constante frente a un puntero en un valor constante
- 22. ¿Puedo hacer una constante a partir de una variable env en tiempo de compilación en csharp?
- 23. verificación de iPhone para una constante en tiempo de ejecución en la aplicación universal
- 24. Buscar existencia de número en una lista ordenada en tiempo constante? (Pregunta de la entrevista)
- 25. ¿Cómo obtengo una constante numérica en tiempo de compilación durante la compilación en Visual C++?
- 26. En JavaScript, ¿hay alguna fuente de tiempo con una resolución constante en milisegundos?
- 27. Compruebe si la constante se define en tiempo de ejecución en Obj-C
- 28. vector con tamaño constante
- 29. Constante Inno Setup en el Código Sección
- 30. Recargar archivos Clojure en emacs
¡Muchas gracias! Eso tiene sentido. –