¿Hay alguna forma abreviada de actualizar un campo de estructura específico en raqueta?
Supongamos que tengo una estructura con muchos campos:
(struct my-struct (f1 f2 f3 f4))
Si debo devolver una nueva estructura conf2
actualizado, tengo que reformular todos los demás campos:
(define s (my-struct 1 2 3 4))
(my-struct (my-struct-f1 s)
(do-something-on (my-struct-f2 s))
(my-struct-f3 s)
(my-struct-f4 s))
Lo cual es redundante y sería una fuente de errores si actualizo el número de los campos o cambio sus pedidos.
Realmente me pregunto si existe una manera de actualizar un campo específico para una estructura como:
(my-struct-f2-update (my-struct 1 2 3 4)
(lambda (f2) (* f2 2)))
;; => (my-struct 1 4 3 4)
O simplemente puedo establecerlos en un nuevo valor como:
(define s (my-struct 1 2 3 4)
(my-struct-f2-set s (* (my-struct-f2 s) 2))
;; => (my-struct 1 4 3 4)
Aviso, esto no está mutandos
aquí;my-struct-f2-update
ymy-struct-f2-set
debería estar devolviendo una copia des
conf2
campo actualizado
En Haskell conozco la biblioteca 'lente' que hace este trabajo. Me pregunto si hay algunas formas similares que puedo adoptar para la raqueta. Gracias.