Clojure - efeitos colaterais acontecendo fora de ordem

Enquanto brincava com o Clojure, escrevi um programa muito básico para ecoar o que o usuário digitar nele. No entanto, não funciona de uma maneira que eu percebo natural. Aqui está o código:

(defn goo []
  (print "echo> ")
  (def resp (read-line))
  (print resp)
)

Eu esperaria que o código funcionasse assim (para mim, digitandofoo como entrada pararead-line):

user=> (goo)
echo> foo
foonil

Mas, em vez disso, o eco e a linha de leitura são alterados:

user=> (goo)
foo
echo> foonil

Por que isso acontece? Falta uma sutileza?

EDIT: Da resposta de Joe, a solução correta atualizada é:

(defn goo []
  (print "echo> ")
  (flush)
  (def resp (read-line))
  (print resp)
  (flush)
)

Além disso, os flushes não são necessários se você usarprintln ao invés deprint.

questionAnswers(2)

yourAnswerToTheQuestion