Clips入门:pyclips中不使用multislot给模板单槽赋值两个变量的咨询
问题解决方法
报错原因
- 你定义的
WordPR模板中text是单字段槽(普通slot类型),仅支持存储单个值,你在assert语句中直接传入?t和?text两个变量,尝试给单字段槽赋值多值,触发了报错。 - 你提到的“assert中给单个槽赋值多个变量”是
multislot(多字段槽)的用法,多字段槽存储多值时会以序列/元组形式返回,不符合你要的字符串拼接输出需求。
解决方案
你不需要改用multislot,直接用CLIPS内置的字符串拼接函数str-cat,把两个变量拼接为单个字符串后再赋值给text槽即可。
修改规则代码
你只需要调整createlist2规则中assert部分的text赋值逻辑:
(defrule createlist2 (declare (salience 91)) (and (Temp (tempvalue "YES") (temptext ?t)) (ROW (counter ?A) (ID ?id) (Text ?text) (Path "//Document/Sect[3]/Sect/L/LI/LBody/ParagraphSpan"))) => (printout t " value is " ?t ?text crlf) (assert (WordPR (counter ?A) (structure ?id) (tag "list") (style "list") (text (str-cat ?t " " ?text)))))
这里的str-cat ?t " " ?text会把?t、空格、?text三个值拼接为单个字符串,最终text槽存储的内容就是你期望的1. § 2 is amended as follows:格式,不会出现元组输出。
内容的提问来源于stack exchange,提问作者ANA
相关产品推荐
相关产品推荐

