clojure naming

¿Cuándo usar el signo de exclamación en clojure(o lisp)?



naming (1)

Dicen que usan signos de exclamación al nombrar funciones impuras.

Pero no entiendo exactamente las funciones "impuras". Son ellos

  • las funciones cambian el estado de sus argumentos (vía reset, alter, java-object-methods, ...)
  • las funciones se producen como efectos secundarios (por ejemplo, imprimir, escupir, ...)
  • ¿o ambos?

Obviamente, los apis oficiales de clojure no tienen ningún problema en todos los casos anteriores. Me pregunto cuándo debería ponerlos y necesito su ayuda para que mi código esté más sano.


Yo diría que no necesitas poner ! en cada función impura. Community Clojure Style Guide recomienda:

Los nombres de funciones / macros que no son seguras en las transacciones STM deben terminar con un signo de exclamación.

Así que, básicamente, ¡termina con ! Funciones que cambian el estado de los átomos, metadatos, vars, transitorios, agentes y también io.

Gracias a @noisesmith por actualización.