Лиспийский способ чтения пользовательского ввода с клавиатуры в Clojure?

я пишу функцию для моей программы Clojure, которая считывает ввод пользователя с клавиатуры. Если пользователь вводит недопустимые данные, пользователь получает предупреждение, а затем снова запрашивается. При использовании процедурного стиля в таком языке, как Python, я бы сделал что-то вроде этого:

while 1:
    value = input("What is your decision?")
    if validated(value):
        break
    else:
        print "That is not valid."

Лучшее, что я могу придумать в Clojure, это:

(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)))))

Это работает, но это избыточно и кажется многословным. Есть ли еще способ сделать это на Lispy / Clojurey?

10
задан davidscolgan 23 November 2010 в 00:34
поделиться