我正在为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)))