;; Define a record R
user=> (defrecord R [x])
user.R
;; Create an instance of R called r
user=> (def r (->R 1))
#'user/r
;; Look at r
user=> r
#user.R{:x 1}
;; Is r a record?
user=> (record? r)
true
;; Interestingly adding "fields" not defined in R keeps it a record
user=> (def r2 (assoc r :y 2))
#'user/r2
user=> r2
#user.R{:x 1, :y 2}
;; r2 is still a record
user=> (record? r2)
true
;; But regular map is not a record
user=> (record? {:x 1})
false