我制作了一个函数来回答这样的问题。
(defn ask-ques [ques pred]
(print ques)
(let [user-input (read-line)]
(if #(pred user-input) user-input (recur ques pred))))
我写的主要内容是这样的。
(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首先接收输入并打印";选择一个。(C( 继续或(E(退出:";out,并且pred工作不好。
怎么了?为什么它是这样工作的?我该怎么办?
#(pred user-input)
是一个零参数的函数,由于它有一个非nil
值,if
会将其视为真值,所以你总是会得到user-input
,而永远不会得到recur
。我怀疑你想要(pred user-input)
。