Estoy tratando de trabajar con el libro de Stuart Halloway Programming Clojure. Todo este material funcional es muy nuevo para mí.¿Cuál es la diferencia entre la función de Clojure (nth [índice coll]) y la composición (última (tomar índice coll))
entiendo cómo
(defn fibo[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
genera la sucesión de Fibonacci con pereza. No entiendo por qué
(last (take 1000000 (fibo)))
obras, mientras que
(nth (fibo) 1000000)
lanza un OutOfMemoryError. ¿Podría alguien explicar por qué estas dos expresiones son diferentes? ¿Está (nth) de alguna manera aferrándose a la cabeza de la secuencia?
Gracias!
Ninguno de estos me funciona en tryclj.com ya que el número es tan grande que causa un desbordamiento. AFIRMEMOS que no mantienes una referencia a nada, así que no creo que nada esté "agarrado a la cabeza". ¿Estás seguro de que no es solo porque el número es tan grande? –
La implementación de la última es una implementación recta recursiva O (n), y no se sostiene en nada. nth está implementado en Java y estoy bastante seguro de que no se aferra a nada tampoco. Por lo tanto, ambas secuencias deberían funcionar bien (en teoría). Lo único que se me ocurre, aunque no estoy seguro de que esto afecte el resultado, es que su enésima llamada realmente calcula 1 elemento más que su última llamada. enésimo 1000000 = 1000001er artículo (0 indexación) – vedang
@vedang Gracias ... No habría captado esa importante distinción. No fue la fuente de mi problema, aunque no me había dado cuenta de que el argumento a seguir es el tamaño de la secuencia, mientras que el argumento de nth es el índice. – Josh