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 不符合预期。
排查步骤
- 检查所有动作参数、谓词参数等变量列表,确认变量以
?开头,类型标注采用?x - element的形式。 - 检查
(:types ...)中的层级声明,确认-两侧有空格,且父类型已声明。 - 查看完整 domain 文件中报错位置附近的 typed list。当前日志没有指出具体行,错误也可能出现在其他变量列表中。
修正后如果仍然报错,需要结合完整的 domain 定义和所用的 PDDL 解析器继续排查,因为不同解析器报告错误的位置和支持的语法可能不同。
备注:内容仅供参考。
