【发布时间】:2018-11-05 07:07:17
【问题描述】:
我有一个 minimax-alpha-beta 的功能,事实是它从左到右读取,我希望它向后读取,我考虑过“反向”功能,但我无法做到为我工作。
代码如下:
(defun minimax-alpha-beta (nodo alpha beta)
(cond
((hoja nodo)
(let ((val (evalua nodo)))
(format t "~A " val)
val))
((nodo-min nodo)
(let ((beta-tmp beta))
(do ((ch (hijos nodo) (cdr ch)))
((or (null ch) (<= beta-tmp alpha)) beta-tmp)
(let ((r (minimax-alpha-beta (car ch) alpha beta-tmp)))
(if (< r beta-tmp) (setf beta-tmp r))))))
((nodo-max nodo)
(let ((alpha-tmp alpha))
(do ((ch (hijos nodo) (cdr ch)))
((or (null ch) (<= beta alpha-tmp)) alpha-tmp)
(let ((r (minimax-alpha-beta (car ch) alpha-tmp beta)))
(if (< alpha-tmp r) (setf alpha-tmp r))))))))
我有一个这样实现的示例树:
(defparameter *tree-001*
'(max ((min ((max ((min (15 14))
(min (13 12))))
(max ((min (11 10))
(min (9 8))))))
(min ((max ((min (7 6))
(min (5 4))))
(max ((min (3 2))
(min (1 0)))))))))
我必须把“反向”放在哪里,这样我才能反过来做?
【问题讨论】:
-
“从左到右”和“从左到右”是什么意思?预期返回值是多少?
-
另外,请正确缩进。 gigamonkeys.com/book/…
-
我的意思是 alpha-beta 剪枝使数字从左到右读取,功能是这样完成的,从左到右读取数字。我想要的是反过来做,我从右到左读取数字,我不知道如何实现反向功能。这应该是另一种出路。
-
我缩进了你的代码以便理解它。
-
@Roman345 得到答案后不要更改问题。
标签: lisp common-lisp clisp