Lisp 中用于 minimax-alpha-beta 的 REVERSE 函数
REVERSE function in Lisp for minimax-alpha-beta
我有一个 minimax-alpha-beta 函数,事实是它从左到右读取,我希望它向后读取,我考虑过 "reverse" 函数,但我可以不适合我。
代码如下:
(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)))))))))
我必须把 "reverse" 放在哪里才能反过来做?
我猜测每个节点的hijos
returns children。这可能是你想要扭转的事情。
我有一个 minimax-alpha-beta 函数,事实是它从左到右读取,我希望它向后读取,我考虑过 "reverse" 函数,但我可以不适合我。
代码如下:
(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)))))))))
我必须把 "reverse" 放在哪里才能反过来做?
我猜测每个节点的hijos
returns children。这可能是你想要扭转的事情。