我编写了一个函数,试图以交互方式从用户那里获得 ay/n(是/否)答案。它测试答案是否有效,如果不是,则再次请求用户:
(defn get-valid-answer [question]
(println question)
(loop []
(let [ans (.trim (read-line))]
(if (#{"y" "n"} ans)
ans
(do (println "Please answer \"y\"[yes] or \"n\"[no] only!")
(recur) )))))
上面带有循环递归的版本可以完成这项工作,但我觉得必须有更好(更实用)的方法来做到这一点。我宁愿只进行一次 read-line 调用。任何人都可以建议在这种情况下不使用循环递归但可能使用某些(Clojure 内置)宏的替代版本吗?