处理标准输入 Clojure
Handling stdin Clojure
下面的似乎不起作用,但我不太清楚为什么。 move-board 所做的只是接受一个二维数组和 return 一个二维数组,其余代码都在那里。基本上我正在尝试完成类似以下的事情 python:
While True:
do stuff
if gameover:
print("Game Over!")
break
无法正常工作的 Clojure(打印板一次,要求输入,然后挂起)
(defn game-loop [board]
(loop [b board]
(if (game-over? b) "Game Over!"
(do (print-board b)
(recur (move-board (read-line) b))))))
我们需要看看您的其他功能在做什么。我
将它们最低限度地制作成看起来可能的样子,并重新制作
if 分支更清晰。您的 loop
也没有必要。
(defn game-over? [b] false)
(defn print-board [b] (println b))
(defn move-board [ln b] (println "moving board:" ln))
(defn game-loop [b]
(if (game-over? b)
"Game Over!"
(do (print-board b)
(recur (move-board (read-line) b)))))
(game-loop :bored)
使用前三个函数,您的循环将按预期运行:
无限提示单行。好吧,至少是第一个
时间,但随后您的 "hang" 问题被重现。
这可能是由 this issue with the JVM. Also discussed here 引起的。
下面的似乎不起作用,但我不太清楚为什么。 move-board 所做的只是接受一个二维数组和 return 一个二维数组,其余代码都在那里。基本上我正在尝试完成类似以下的事情 python:
While True:
do stuff
if gameover:
print("Game Over!")
break
无法正常工作的 Clojure(打印板一次,要求输入,然后挂起)
(defn game-loop [board]
(loop [b board]
(if (game-over? b) "Game Over!"
(do (print-board b)
(recur (move-board (read-line) b))))))
我们需要看看您的其他功能在做什么。我
将它们最低限度地制作成看起来可能的样子,并重新制作
if 分支更清晰。您的 loop
也没有必要。
(defn game-over? [b] false)
(defn print-board [b] (println b))
(defn move-board [ln b] (println "moving board:" ln))
(defn game-loop [b]
(if (game-over? b)
"Game Over!"
(do (print-board b)
(recur (move-board (read-line) b)))))
(game-loop :bored)
使用前三个函数,您的循环将按预期运行: 无限提示单行。好吧,至少是第一个 时间,但随后您的 "hang" 问题被重现。
这可能是由 this issue with the JVM. Also discussed here 引起的。