PAYATHON 2026

PDDL 中添加类型声明后出现解析错误,如何修正?

AI 小顾

结论

报错表示解析器读取 typed list 时遇到了它不接受的内容 -element。根据目前的日志和 (:types ...) 片段,还无法确定是哪一行触发了错误。可以先区分类型声明和变量类型标注,再检查连字符两侧的空格,以及父类型是否已声明。

类型声明的写法

在 PDDL 中,(:types ...) 用来声明类型及其父类型。例如,若 ele、dor、loc、rm 是父类型,可以这样写:

(:types
  ele dor loc rm
  element - ele
  door - dor
  location - loc
  room - rm
)

原片段中的 element -ele 可以改为 element - ele,让 - 单独作为类型层级分隔符。还要确认 domain 中已经声明了 ele、dor、loc、rm。如果这些类型之间不需要层级关系,也可以直接声明为普通类型:

(:types element door location room)

变量类型标注的写法

类型声明和变量声明使用不同的语法。动作参数等变量需要以 ? 开头,并按 ?变量 - 类型 的形式标注,例如:

(:action open-door
  :parameters (?d - door ?l - location)
  ...
)

如果在变量列表中误用了类型声明的写法,或变量前缺少 ?,解析器可能会在读取 typed list 时报告变量格式错误。日志中的 Expected item to be a variable 表示,报错位置附近的内容被当作变量列表解析,但其中的 -element 不符合预期。

排查步骤

  1. 检查所有动作参数、谓词参数等变量列表,确认变量以 ? 开头,类型标注采用 ?x - element 的形式。
  2. 检查 (:types ...) 中的层级声明,确认 - 两侧有空格,且父类型已声明。
  3. 查看完整 domain 文件中报错位置附近的 typed list。当前日志没有指出具体行,错误也可能出现在其他变量列表中。

修正后如果仍然报错,需要结合完整的 domain 定义和所用的 PDDL 解析器继续排查,因为不同解析器报告错误的位置和支持的语法可能不同。

备注:内容仅供参考。