我做了一个函数来回答这样的问题。
(defn ask-ques [ques pred]
(print ques)
(let [user-input (read-line)]
(if #(pred user-input) user-input (recur ques pred))))我把main写成这样。
(defn -main []
(loop []
(let [user-input (ask-ques "CHOOSE ONE. (C)ontinue OR (E)xit : " #(contains? #{"C" "E"} %))]
(when (= user-input "C") (apply body (rand-nth (seq voc-map))) (recur)))))但是,Clojure首先收到输入并输出"CHOOSE ONE。(C)ontinue OR (E)xit:“out,而pred不能很好地工作。
有什么问题吗?为什么它是这样工作的?我该怎么做呢?
发布于 2020-11-12 10:04:17
#(pred user-input)是一个零参数的函数,因为它有一个非nil的值,所以if会把它当作真,所以你总是会得到user-input,它永远不会recur。我怀疑你想要的是(pred user-input)。
https://stackoverflow.com/questions/64796526
复制相似问题