title: Lispy way to read user input from the keyboard in Clojure?
body: <p>I am writing a function for my Clojure program that reads user input from the keyboard.  If the user enters invalid input, the user is warned and then prompted again.  When using a procedural style in a language like Python, I would do something like this:</p>
  
  <pre><code>while 1:
      value = input("What is your decision?")
      if validated(value):
          break
      else:
          print "That is not valid."
  </code></pre>
  
  <p>The best I can come up with in Clojure is this:</p>
  
  <pre><code>(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)))))
  </code></pre>
  
  <p>This works, but it is redundant and seems verbose.  Is there a more Lispy/Clojurey way to do this?</p>