处理stdin Clojure

时间:2017-08-15 03:03:36

标签: clojure stdin

以下似乎不起作用,但我不太清楚为什么。所有移动板都采用2D阵列并返回2D阵列,其余的代码都在那里。基本上我试图完成类似下面的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))))))

1 个答案:

答案 0 :(得分:2)

我们需要看看你的其他功能在做什么。一世 将它们最小化地制作成可能的东西,并重新制作 if-branch清除器。您的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