Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure没有';I don’我不能按我所希望的方式工作_Clojure_Readline - Fatal编程技术网

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的答案,请参阅此文档列表中的一些优秀书籍: