2017-08-15 158 views
1

下面看起来不起作用,但我不太清楚为什么。所有的移动板都是采用二维数组并返回一个二维数组,其余的代码都在那里。基本上我试图完成类似下面的Python:处理stdin Clojure

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)))))) 
+0

您可以试着单独将'read-line'的结果分开并打印出来,看看'read-line'是否返回。另一个要检查的地方是你的“游戏结束?”功能;它是无限循环的吗? –

回答

2

我们需要看到你的其他功能在做什么。我 捏造他们似乎很可能,并重新制作,以使 如果分支更清晰。您的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) 

有了这些前三名的功能,你的循环行为与预期相同: 提示单行线,无限。那么,至少第一次是 时间,但那么你的“挂起”问题就转载了。

这可能是由this issue with the JVM引起的。另外discussed here

+0

我排除了移动板,因为它调用了许多其他功能,我将不得不发布大部分程序。尽管如此,我可以向你保证它没有问题。你所假设的基本上是好的,唯一的区别是,最终董事会将处于终端状态并停止递归。印刷板只是将印刷图映射到每一行。 – Solaxun

+0

所以 - 这是因为我在emacs/cider中运行它。当我跑步时(不必踩踏跑步),它可以工作。猜猜毕竟没有问题,但我会标记这正确的为你的努力:) – Solaxun