0votos

LAP (Lista Anterior Posterior) en Clojure

por AverageUser hace 5 meses

(def lap (iterate (fn [xs] (mapcat #(list (dec %) (inc %)) xs)) '(1)))

Se quiere escribir una función llamada lap, de lista anterior posterior, que genere la siguiente lista infinita [[1], [0,2], [-1,1,1,3], [-2,0,0,2,0,2,2,4]…] Donde una lista empieza por 1 y los sucesivos elementos resultan del anterior sustituyendo cada elemento por su antecesor y su sucesor (sumando y restando 1), es decir, el 1 por el 0 y el 2, el 0 por el -1 y el 1, el 2 por el 1 y el 3, etc. La lista empieza por el 1.

1
2
3
4
5
6
7
;; lista "infinita" (Lazy Seq) 
(def lap 
  (iterate (fn [xs] (mapcat #(list (dec %) (inc %)) xs)) '(1))) 
 
;; Prueba : 
;; > (take 5 lap) 
;; ((1) (0 2) (-1 1 1 3) (-2 0 0 2 0 2 2 4) (-3 -1 -1 1 -1 1 1 3 -1 1 1 3 1 3 3 5)) 
1 comentario
0votos

Escrito por AverageUser hace 5 meses

Esta es mas elegante
(def lap
  (iterate #(mapcat (juxt dec inc) %) '(1)))

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.