Clojure (línea de lectura) devuelve nil; no solicita

Estoy trabajando en mi primer programa Clojure adecuado: un juego de ajedrez. Tengo lo siguiente:

(defn human-move [board]
  (board-utils/print-board board)
  (print "Enter your move, like this: 'E7 E5' ...")
  (loop [raw-move (terminal-input)] ;;(read-line)]
    (println "I just received" raw-move)
    (if (re-matches #"[A-H][1-8]\s[A-H][1-8]" raw-move)
      (parse-move raw-move)
      (do
        (println "Invalid format! There should be a letter, number, space, letter, and final number.")
        (print "Try again: ")
        (recur (read-line))))))

Nota el lugar donderead-line es comentado y reemplazado porterminal-input. read-line me estaba dando una NullPointerException, así que para fines de diagnóstico:

(defn terminal-input []
  (println "input")
  (let [whatnot (read-line)]
    (println "received" whatnot)
    whatnot))

Entonces, cuando llamo ahuman-move.

...
+---+---+---+---+---+---+---+---+
| P | P | P | P | P | P | P | P |
+---+---+---+---+---+---+---+---+
| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
Enter your move, like this: 'E7 E5' ...input
received nil
I just received nil

Nunca tuve la oportunidad de escribir algo como entrada. Si fuera Java, comenzaría a jugar pequeños juegos con el recolector de basura (llamando aScanner.next(), por ejemplo), pero con Clojure no sabía qué hacer además de poner el(flush) ahí

Por lo que vale, esto es con SLIME.

También intenté tenerterminal-input proporcionar datos ficticios, y aprendí que aparentemente estoy usandoloop/recur incorrectamente. Sin embargo, no lo he investigado a fondo, ya que me ha distraído laread-line cuestiones. @

Gracias por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta