最近,我读到了一份用剪辑实现自动检测的文件。它显示了部分代码。结果表明,所有的防御类都属于主模块。但是在其他的防御模块中,他们的防御规则可以使用这些防御类。在advanced.docx中,它表示“预定义的主模块不导入或导出任何构造”。我也在剪辑界面上作证过。
例如:
(defclass MAIN::telemetry-data
(is-a USER)
(slot name(type SYMBOL))
(slot predict-value(type SYMBOL NUMBER)))
(defrule discrimination::analog-data-discriminate
(object (is-a telemetry-data ) (name ?name))
=>
(printout t "name:"?name crlf)
)
那么,如何才能不出错地使用遥测数据对象呢?我知道我可以在识别模块中定义类,以便执行正确的操作。但我只是想知道是否还有其他方法来使用主模块中由其他缺陷模块定义的构造。
非常感谢!
发布于 2015-06-05 17:03:24
这是“基本方案编制指南”第10.1节的有关段落:
所有预定义的系统类(参见9.2节)都属于主模块。但是,没有必要导入或导出系统类;它们总是在作用域内。除去前面的异常,预定义的主模块不会导入或导出任何构造。但是,与其他模块不同,主模块可以在启动或清除命令后重新定义一次。
您所要做的就是重新定义主模块:
CLIPS> (clear)
CLIPS> (defmodule MAIN (export ?ALL))
CLIPS>
(defclass MAIN::telemetry-data
(is-a USER)
(slot predict-value))
CLIPS>
(defmodule discrimination (import MAIN ?ALL))
CLIPS>
(defrule discrimination::analog-data-discriminate
(object (is-a telemetry-data) (name ?name))
=>
(printout t "name: " ?name crlf))
CLIPS>
您提供的代码片段还有其他问题。类型定义是可以的,但是名称槽已经为类预定义了。
https://stackoverflow.com/questions/30665457
复制相似问题