我创建了这个排名板功能。它需要一块板,对它进行排名,使得下一步行动并重现。如何在电路板满时停止复发?当没有移动时,make-move-on-board功能会中断,我得到一个Key必须是整数错误。
(defn rank-boards [board max-mark min-mark depth]
(cond
(r/game-in-progress? board max-mark min-mark) in-progress-score
(r/tie? board max-mark min-mark) tie-score
(r/winner? board max-mark min-mark) highest-score)
(recur
(b/make-move-on board (next-space board max-mark min-mark depth) max-mark)
min-mark
max-mark
(inc depth)))
答案 0 :(得分:2)
假设一个名为is-full?
的函数在停止递归时返回一个truthy值,并且你想要的返回值是得分:
(defn rank-boards [board max-mark min-mark depth]
(if (r/is-full? board)
;; board is full, so we return the score
(cond
(r/game-in-progress? board max-mark min-mark) in-progress-score
(r/tie? board max-mark min-mark) tie-score
(r/winner? board max-mark min-mark) highest-score)
;; board is not yet full, so we recurse
(recur
(b/make-move-on board (next-space board max-mark min-mark depth) max-mark)
min-mark
max-mark
(inc depth)))
该代码最初抛弃了cond
的结果 - 这不是一个特别明智的操作。