Estoy trabajando en mi primer programa Clojure adecuado: un juego de ajedrez. Tengo el siguiente:Clojure (línea de lectura) devuelve nil; no indica
(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 del lugar donde read-line
esté comentada y sustituido por terminal-input
. read-line
me estaba dando una NullPointerException, por lo que para fines de diagnóstico:
(defn terminal-input []
(println "input")
(let [whatnot (read-line)]
(println "received" whatnot)
whatnot))
Entonces, cuando llamo human-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, empezaría a jugar pequeños juegos con el recolector de basura (llamando al Scanner.next()
, por ejemplo), pero con Clojure no sabía qué hacer además de poner el (flush)
allí.
Por lo que vale, esto es con SLIME.
También trató de tener terminal-input
proporcionan datos ficticios, y aprendió que estoy usando aparentemente loop
/recur
incorrectamente. No lo he investigado súper bien, ya que me he distraído con los problemas read-line
.
Gracias de antemano.
Por cierto, también he agregado read-from-minibuffer y y-or-n-p support. –
Eso es bastante asombroso. Espero tener una razón para probar esto. – amalloy