Una alternativa al uso de mapas es crear un "registro". Los registros están diseñados específicamente para este caso de uso y generalmente tienen un mejor rendimiento. Además, tienen un "tipo" con nombre que se puede utilizar para comportamiento polimórfico.
Los registros se definen con la lista de nombres de campo para instancias de registros. Se tratarán como claves de palabras clave en cada instancia de registro.
;; Define a record structure
(defrecord Person [first-name last-name age occupation])
;; Positional constructor - generated
(def kelly (->Person "Kelly" "Keen" 32 "Programmer"))
;; Map constructor - generated
(def kelly (map->Person
{:first-name "Kelly"
:last-name "Keen"
:age 32
:occupation "Programmer"}))
Los registros se utilizan casi exactamente igual que los mapas, con la salvedad de que no se pueden invocar como una función como los mapas.
user=> (:occupation kelly)
"Programmer"