我想跳出下面的循環,並在第10行計算結果爲真時返回最小移動。我使用print語句查看了輸出,並且當第10行的值爲true時,它會查找我正在查找的數據,但會繼續發生。在Clojure中,有一種方法可以在語句評估爲真時停止循環?或者我應該使用循環以外的其他東西嗎?在Clojure退出循環迴路
(defn minimax [board max-mark min-mark depth best-score]
(loop [board board
max-mark max-mark
min-mark min-mark
depth depth
best-score best-score]
(if (= best-score (best-min-score board max-mark min-mark depth))
(best-max-move board max-mark min-mark depth)
(do
(if (= best-score (best-min-score board min-mark max-mark depth))
(best-min-move board min-mark max-mark depth)
(recur
(b/make-move-on board (remaining-scores board max-mark min-mark depth) max-mark)
min-mark
max-mark
(inc depth)
(dec best-score)))))))
只有當第二個if爲false時,您的代碼纔會重複出現。 – 2014-10-16 19:12:46
你能詳細點嗎?當第二個if爲true時,它不返回值(最小移動板最小標記最大標記深度)。它繼續進行得分動作,這讓我相信它是反覆出現的。 – user3245240 2014-10-16 19:16:44
你怎麼知道它是反覆出現的?你是否聲稱'如果'不能像它應該那樣工作?如果你的條件是真的,你的'if'將評估這兩個的第一個s表達式。如果這是你正在執行的代碼,除非條件爲假,否則它不能重複。 – 2014-10-16 22:55:37