You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:05:26