El problema con (Sistema/salida 0) es que mata a toda la JVM. La verdadera pregunta es cómo salir programáticamente de solo la respuesta actual y volver a la función que se lanzó.
Aquí es un truco conveniente:
(clojure.main/repl
; Exit the repl whenever the user enters "exit" at the prompt.
:read (fn [request-prompt request-exit]
(let [form (clojure.main/repl-read request-prompt request-exit)]
(if (= 'exit form) request-exit form))))
clojure.main/repl pide de nuevo un lector, por repl-leer, por defecto para conseguir una forma a la vez. Uno de los argumentos para el lector es un objeto centinela especial que el lector debe devolver cuando ya no hay más formularios para leer. El lector predeterminado, repl-read, devuelve el valor centinela solo en EOF. En el prompt de repl-read, no tiene acceso al objeto centinela, por lo que no puede devolverlo para decirle al evaluador que ha terminado de ingresar formularios. Al instalar su propio lector, puede buscar un formulario particular, por ejemplo, el símbolo de salida, y devolver el objeto centinela siempre que se lea este formulario, indicando así al evaluador que está listo para salir de la réplica, sin matar en realidad todo el VM.
yo añadiría pregunta más específica: cuál es la manera de matar la réplica con código, no comandos externos ... – Nevena