gpt4 book ai didi

lisp - 检查 Tic-Tac-Toe 中的胜利

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:08 25 4
gpt4 key购买 nike

好的,所以我即将完成我的最新项目,一个(诚然不是很好)在 Common Lisp 中实现井字游戏(整个程序可用 here),但我还停留在最后一部分;我不知道如何让我的功能检查赢家工作。该函数(及其从属函数)如下所示:

(defun check-for-win ()
(cond ((is-line 1 2 3) t)
((is-line 1 4 7) t)
((is-line 1 5 9) t)
((is-line 2 5 8) t)
((is-line 3 6 9) t)
((is-line 3 5 7) t)
((is-line 4 5 6) t)
((is-line 7 8 9) t))
nil)

(defun is-line (a b c)
(let ((a (aref *board* (- a 1)))
(b (aref *board* (- b 1)))
(c (aref *board* (- c 1))))
(if (and
(eql a b)
(eql a c)
(eql b c))
t
nil)))

(尽管没有缩进那么深),并且在 (is-line) 中,a、b 和 c 将(在获胜场景中)设置为一个符号(:X :O)。如何使相等性检查起作用?

最佳答案

defun 语句中隐含了progn,所以是这样求值的:

  1. 语句被一个接一个地求值;
  2. 最后一个语句的值作为函数结果返回。

在您的check-for-win 中,您有 2 个语句:condnil。根据progn的评估规则,任何调用都会返回nil的值,而cond的结果将被忽略。

试试这段代码:

(defun check-for-win ()
(cond ((is-line 1 2 3) t)
((is-line 1 4 7) t)
((is-line 1 5 9) t)
((is-line 2 5 8) t)
((is-line 3 6 9) t)
((is-line 3 5 7) t)
((is-line 4 5 6) t)
((is-line 7 8 9) t)
(:else nil)))

:else 只是一个关键字,与任何关键字一样,它被评估为 true。您可以使用任何其他关键字或仅使用 true。因此,如果之前没有语句给出 true,cond(以及所有函数)的结果将为 nil

关于lisp - 检查 Tic-Tac-Toe 中的胜利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com