2017-08-15 61 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