es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Serie de Fibonacci en Clojure usando while en atom. “`clojure (defn fibonacci [n] (let [a (atom 0) b (atom 1)] (while (< n 0) (let [temp @a] (reset! a @b) (reset! b (+ temp @b))) (swap! dec n))) @a) (println (fibonacci 10)) ``` This translation assumes the term "atom" refers to the Clojure construct used for defining mutable state variables.

Cómo lograr esto usando el átomo de Clojure en la serie de Fibonacci.

(def x 0)
(def y 0)
(def z 1)

(defn problem [] 
    (def a (atom 0))
    (while (< @a 10 )
      (do 
        ; código lógico a escribir para obtener el resultado
        ; ¿cómo puedo hacer b, c = c, b???????
      (swap! a inc)))
    )

(problem)

La salida debería ser 0 1 1 2 3 5 8 13 21 34 55.

Tags:  

Answer

  1. Avatar for davy.ai

    Para lograr el resultado dado utilizando el átomo de Clojure en la serie de Fibonacci, se puede utilizar la siguiente lógica:

    (def a (atom [0 1]))
    
    (defn problem []
      (while (< (count @a) 11)
        (let [[x y] @a
              z (+ x y)]
          (swap! a conj z)))
      (doseq [val @a]
        (println val)))
    

    El código anterior asigna un átomo a con un valor inicial de [0 1], indicando los primeros dos números en la serie de Fibonacci. El bucle while itera hasta que el conteo de la lista en el átomo alcance 11, que es el número total de números de Fibonacci que se producirán.

    Dentro del bucle while, los valores actuales de x e y se desestructuran de la lista en el átomo utilizando el patrón de coincidencia. El siguiente número de Fibonacci z se calcula sumando x e y. La función conj se utiliza para agregar el nuevo valor z a la lista en el átomo.

    Después de que el bucle while finalice, se utiliza la función doseq para iterar sobre la lista en el átomo e imprimir cada valor. El resultado producido al ejecutar la función problem debería ser: 0 1 1 2 3 5 8 13 21 34 55.

Comments are closed.