¿Por qué la cadena impresa usando 'print' en clojure solo aparece en mi consola después de usar println?

Tengo el siguiente código en clojure:

(do
    (println "starting....")
    (sig! a 0)
    (sig! b 0)
    (future
      (Thread/sleep 4000)
      (println "switch 1")
      (sig! a 1)
      (sig! b 0)
      (Thread/sleep 4000)
      (println "switch 2")
      (sig! a 0)
      (sig! b 1)
      (Thread/sleep 4000)
      (println "switch 3")
      (sig! a 1)
      (sig! b 1)) nil))

Tengo algunos observadores que escuchan los átomos a, b, sy c1 e imprimen algunas cadenas cuando cambian. Utilizando(print (str uid ":" @o "\n") o la versión println. Los documentos de clojure dicenprint yprintln debe comportarse exactamente de la misma manera, con la excepción de la nueva línea enprintlnSin embargo, no estoy viendo esto. Cuando el observador usaprintln Veo las cuerdas de inmediato. Cuando el observador usaprint. Solo veo la salida cuando la próximaprintln se llama. A continuación tengo la salida conprintln vs conprint. Conprint Solo veo los valores hasta el últimoprintln.

starting....
switch 1
a:1
s:1
switch 2
a:0
b:1
s:0
s:1
switch 3 

Ahora con println

starting....
switch 1
a:1

s:1

switch 2
a:0
b:1


s:0

s:1

switch 3
a:1

s:0

c1:1

Como puede ver, los cambios recogidos por los observadores se imprimen en este caso. Estoy usando clojure 1.5. Casi parece unprint requiere unprintln para vaciar su contenido a la consola.

Respuestas a la pregunta(3)

Su respuesta a la pregunta