Lisp中的REVERSE函数用于minimax-alpha-beta

时间:2018-11-05 07:07:18

标签: lisp common-lisp clisp

我有一个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)))))))))

我将在哪里放置“反向”,以便反之亦然?

1 个答案:

答案 0 :(得分:2)

我猜想hijos返回每个节点的孩子。这可能就是您要扭转的事情。