¿Es posible tener una estructura anidada dentro de una estructura en Clojure? Considere el siguiente código:Estructura de Clojure anidada en otra estructura
(defstruct rect :height :width)
(defstruct color-rect :color (struct rect))
(defn
#^{:doc "Echoes the details of the rect passed to it"}
echo-rect
[r]
(println (:color r))
(println (:height r))
(println (:width r)))
(def first-rect (struct rect 1 2))
;(def c-rect1 (struct color-rect 249 first-rect)) ;form 1
;output "249 nil nil"
(def c-rect1 (struct color-rect 249 1 2)) ;form 2
;output "Too many arguments to struct constructor
(echo-rect c-rect1)
Por supuesto, esto es un ejemplo artificial, pero hay casos en los que quiero romper una estructura de datos de gran tamaño en subestructuras más pequeños para hacer el código más fácil de mantener. Como los comentarios indican que si hago el formulario 1, obtengo "249 nil nil", pero si hago el formulario 2, obtengo "Demasiados argumentos para struct constructor".
Si me estoy acercando a este problema de la manera incorrecta, por favor dígame qué debo hacer. Buscar en el grupo de Google Clojure no me mostró nada.
Editar:
supongo que no era tan clara en el estado de mi pregunta que yo:
1.) ¿Es posible anidar una estructura dentro de otra en Clojure? (A juzgar por abajo eso es un sí.)
2.) De ser así, ¿cuál sería la sintaxis correcta? (De nuevo, a juzgar por abajo, parece que hay algunas maneras en que se puede hacer esto.)
3.) ¿Cómo se obtiene un valor con una clave específica cuando se tiene una estructura anidada dentro de otra estructura?
Supongo que mi código de muestra realmente no demostró lo que estaba tratando de hacer muy bien. Estoy agregando esto aquí para que otros que busquen esto puedan encontrar esta pregunta y sus respuestas más fácilmente.
Gracias Paul - esto es más o menos exactamente lo que quería saber. –