Clojure 没有按照我想要的方式工作



我制作了一个函数来回答这样的问题。

(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)

最新更新