Стоит посмотреть Фантастическое видео Рича Хикки о личности и состоянии .
Записи предназначены для неизменности и для сохранения состояния чего-либо как значения.
Чтобы смоделировать состояние изменяющегося объекта, я бы рекомендовал использовать ссылку , которая ссылается на неизменяемое значение , которое представляет текущее состояние.Вы можете использовать записи для неизменного состояния, но часто проще просто использовать простую карту.
Простой пример, где изменяемое состояние - это табло для игры:
; set up map of current scores for each player
(def scores
(ref
{:mary 0
:joe 0 }))
; create a function that increments scores as a side effect
(defn add-score [player amount]
(dosync
(alter scores update-in [player] + amount)))
; add some scores
(add-score :mary (rand-int 10))
(add-score :joe (rand-int 10))
; read the scores
@scores
=> {:mary 6, :joe 1}