Estoy escribiendo una función para mi programa Clojure que lee la entrada del usuario desde el teclado. Si el usuario ingresa una entrada no válida, se avisa al usuario y luego se le solicita nuevamente. Cuando se utiliza un estilo de procedimiento en un lenguaje como Python, me gustaría hacer algo como esto:Lispy forma de leer la entrada del usuario desde el teclado en Clojure?
while 1:
value = input("What is your decision?")
if validated(value):
break
else:
print "That is not valid."
Lo mejor que puedo llegar a en Clojure es la siguiente:
(loop [value (do
(println "What is your decision?")
(read-line))]
(if (validated value)
value
(recur (do
(println "That is not valid.")
(println "What is your decision?")
(read-line)))))
Esto funciona, pero es redundante y parece detallado. ¿Hay alguna forma más de Lispy/Clojurey para hacer esto?