由于这是我关于SO的第一个问题,我提出的问题一直困扰着我几个小时。 几天前我开始与Clojure“玩”,并且在处理文本打印时已经过了一个相当有趣的行为。
我写了一个小程序来取一个数字作为输入并打印“ok”或“not ok”当它是3的倍数或不是。我还添加了一行代码来打印文本,要求用户在从stdin
读取一行之前输入一个数字。问题是,这个print
指令在read-line
指令之前,仍然不会打印到屏幕上。我的意思是,不是在实际阅读stdin
之前。
问题到底是什么?我不是来自Lisp世界(事实上,CLojure是我的第一个类似Lisp的语言),所以我真的不知道为什么会发生这种情况。任何帮助将不胜感激。
代码:
(defn ok [n]
(if (= (mod n 3) 0)
"ok"
"not ok"))
(defn main []
(print "Type a number: ") ; This actually prints *after* the read-line instruction
(flush) ; EDIT: The flush function is the missing part of the code. It's all ok now.
(let [n (Integer/parseInt (read-line))]
(println (ok n)))
(recur)) ; it is supposed to run until Ctrl-C is signalized
(main)
输出图像: http://i.stack.imgur.com/O8Cu0.png
提前致谢!