Clojure没有';I don’我不能按我所希望的方式工作
我做了一个函数来回答这样的问题Clojure没有';I don’我不能按我所希望的方式工作,clojure,readline,Clojure,Readline,我做了一个函数来回答这样的问题 (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 :
(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)))))
我写了这样的主文
(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首先收到了输入,并打印了“CHOOSE ONE.(C)continue或(E)xit:”out,并且pred不能很好地工作
有什么问题吗?为什么它是这样工作的?我该怎么办呢?
#(pred user input)
是一个零参数函数,因为它有一个非nil
值,if
会将它视为真值,所以你总是会得到用户输入,而且它永远不会重复出现。我怀疑您想要的是(pred user input)
。我想知道为什么在打印上述代码之前还要执行read line。@suhyeoncoi您可能想在打印
调用之后添加(flush)
调用,因为打印不会自动刷新输出。否则,您可以将print
替换为println
,确实如此。@leetwinski感谢您让我知道。多亏了你的建议,我的技能有所提高。除了下面Sean的答案,请参阅此文档列表中的一些优秀书籍: