我正在为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方法吗?

最佳答案

(defn input []
   (println "What is your decision?")
   (if-let [v (valid? (read-line))]
      v
      (do
         (println "That is not valid")
         (recur)))

07-24 20:04
查看更多