He notado que las secuencias diferidas en Clojure parecen estar representadas internamente como listas enlazadas (o al menos están siendo tratadas como una secuencia con solo acceso secuencial a los elementos). Incluso después de haber sido guardado en la memoria caché, el tiempo de acceso sobre el Lazy-Seq con nth
es O (n), no el tiempo constante como con los vectores.Clojure Lazy Sequences that Vectors
;; ...created my-lazy-seq here and used the first 50,000 items
(time (nth my-lazy-seq 10000))
"Elapsed time: 1.081325 msecs"
(time (nth my-lazy-seq 20000))
"Elapsed time: 2.554563 msecs"
¿Cómo puedo obtener una búsquedas en tiempo constante o crear un vector perezoso de forma incremental en Clojure?
Imagine que durante la generación del vector diferido, cada elemento es una función de todos los elementos anteriores a él, por lo que el tiempo dedicado a atravesar la lista se convierte en un factor importante.
preguntas relacionadas únicamente se presentaron esta incompleta fragmento de código Java: Designing a lazy vector: problem with const
Gracias por la gran respuesta! Sí, tu ejemplo de Fibonacci era más parecido a lo que estaba buscando: creación perezosa de un vector. – ivar
También puede usar 'nth' en la secuencia' fib' de pereza :) '(nth fib 10)' – NikoNyrh