我想跳出下面的循环,并在第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