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
.