While dabbling in Clojure I’ve written a very basic program to echo whatever the user types into it. However, it doesn’t run in a way that I’m perceiving to be natural. Here’s the code:
(defn goo [] (print 'echo> ') (def resp (read-line)) (print resp) )
I would expect the code to run like this (for me typing in foo as the input to read-line):
user=> (goo) echo> foo foonil
But instead, the echo and read-line is switched:
user=> (goo) foo echo> foonil
Why does this happen? Is there a subtlety I’m missing?
EDIT: From Joe’s answer, the updated correct solution is:
(defn goo [] (print 'echo> ') (flush) (def resp (read-line)) (print resp) (flush) )
Also, the flushes aren’t necessary if you use println instead of print.
I know nothing of clojure but this sounds like a case of buffers not getting flushed. Figure out how to flush standard out after the print. The println function probably flushes at the end of each line. Try: