Когда использовать восклицательный знак в clojure (или lisp)?

Говорят, что используют восклицательные знаки при именовании нечистых функций.

Но я нене совсем понимаю "нечистый» функции. Они

функции меняют состояние своих аргументов (через reset !, alter, java-object-method, ...)функции возникают побочные эффекты (например, печать, плевать, ...)или оба?

Очевидно, что официальный clojure apis don 'У меня не должно быть проблем! Интересно, когда мне их поставить и нужна ваша помощь, чтобы сделать мой код более разумным?