AutoLISP井字棋Minimax算法实现报错:bad function:1
井字棋AutoLISP Minimax算法报错排查:
error: bad function: 1 问题概述
- 基于一维数组实现井字棋AI,用
"x"/"o"代表玩家,"-"表示空位,核心逻辑为Minimax算法计算最佳走法 - 运行时触发错误
error: bad function: 1,经日志追踪,错误源自(cond ((game-over board) (score board)))中的(score board)调用,触发场景为棋盘状态'("x" "o" "x" "o" "x" "o" "-" "-" "-")
调试日志
"minimax" "board=" (x o x o x o - - -) "game-over" "win" "win" "full" "max-play" "repeat " 0 "repeat " 1 "repeat " 2 "repeat " 3 "repeat " 4 "repeat " 5 "repeat " 6 "minimax" "board=" (x o x o x o x - -) "game-over" "win" "score" "win" "minimax" "board=" (x o x o x o x - -) "game-over" "win" ; error: bad function: 1
错误分析与排查方向
AutoLISP中bad function: 1错误的核心原因是代码将数值1当作函数执行,结合日志和报错位置,可锁定以下几个可能的错误点:
game-over函数返回值异常:AutoLISP的cond分支会将非nil值视为真值,如果game-over返回1而非标准的t/nil,可能导致后续逻辑误判;同时若game-over的返回值被错误传递到需要函数的位置,也会触发报错。score函数实现问题:如果score函数返回数值1,但后续代码将该返回值当作函数调用(比如错误地加了括号),会直接触发bad function:1。- Minimax递归终止逻辑错误:从日志可见,棋盘
(x o x o x o x - -)已触发game-over,但仍再次调用了minimax,说明递归终止条件未正确生效,可能将score的返回值当作递归调用的参数或函数执行。
后续排查请求
请提供完整的AutoLISP代码,尤其是game-over、score和minimax三个核心函数的实现,以便精准定位错误。
内容的提问来源于stack exchange,提问作者Shiroix3
相关产品推荐
相关产品推荐

