Lisp中minimax alpha-beta的反向函数

Lisp中minimax alpha-beta的反向函数,lisp,common-lisp,clisp,Lisp,Common Lisp,Clisp,我有一个函数,极小极大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 ((bet

我有一个函数,极小极大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))))))))


我必须把“反向”放在哪里,这样我才能反过来做呢?

我猜
hijos
会返回每个节点的子节点。这可能是您想要反转的内容。

我猜
hijos
会返回每个节点的子节点。这可能是你想要逆转的东西。

你所说的“从左到右”和“反过来”是什么意思?预期的返回值是多少?另外,请正确缩进。我的意思是,alpha-beta剪枝使得从左到右读取数字,函数是这样做的,从左到右读取数字。我想要的是,我反过来做,我从右到左读取数字,我不知道如何实现反向功能。这应该是另一条出路。我缩进了你的代码以理解它。@Roman345在你得到答案后不要更改问题。你说的“从左到右”和“从另一个方向”是什么意思?预期的返回值是多少?另外,请正确缩进。我的意思是,alpha-beta剪枝使得从左到右读取数字,函数是这样做的,从左到右读取数字。我想要的是,我反过来做,我从右到左读取数字,我不知道如何实现反向功能。这应该是另一种解决方法。我缩进了你的代码以理解它。@Roman345在你得到答案后不要更改问题。实际上,这正是我想做的,但我不知道如何使用它,也不知道在哪里使用“reverse”函数来完成它,以反转
(hijos nodo)
(reverse(hijos nodo))
。你是如何声称在没有理解基本函数应用程序语法的情况下编写了问题中的代码的?实际上,这个函数花了我很多钱。我是Lisp新手,事实上,这是我第一次以这种方式寻求帮助,我通常会尝试一切,但有时会花费更多。根据你的建议,我这样做了:(do((ch(reverse(hijos nodo))(cdr ch)),这是对的吗?事实上,这正是我想要做的,但我不知道如何使用它,也不知道如何使用“reverse”函数来获取该done,以反转
(hijos nodo)
(reverse(hijos nodo))返回的列表
。您如何声称在不理解基本函数应用程序语法的情况下编写了问题中的代码?实际上,函数的编写花费了我很多。我是Lisp新手,事实是,这是我第一次以这种方式寻求帮助,我通常会尝试所有方法,但有时会花费更多。按照您的建议我,我这样做了:(做((ch(反向(hijos nodo))(cdr ch)))对吗?
(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)))))))))