【问题标题】:REVERSE function in Lisp for minimax-alpha-betaLisp 中用于 minimax-alpha-beta 的 REVERSE 函数
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 实际上这就是我想要做的,但我不知道如何使用它或在哪里放置“反向”功能来完成它
  • 反转(hijos nodo)返回的列表:(reverse (hijos nodo))。您如何声称在不了解基本功能应用程序语法的情况下编写了问题中的代码?
  • 这个功能确实让我付出了很多。我是 Lisp 新手,事实上这是我第一次以这种方式寻求帮助,我通常会尝试一切,但有时会花费更多。根据您的建议,我这样做了:(do ((ch (reverse(hijos nodo)) (cdr ch))) 对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
相关资源
最近更新 更多