在 CLIPS 中是否可以有多个 类 的实例?
Is it possible to have an instance of multiple classes in CLIPS?
我有一个来自 OWL ontology 的 class 结构,我希望将其转换为 CLIPS 知识以执行 closed-world 推理。我现有的 class 层次结构具有多个 class 类型的实例。例如,我想在 CLIPS 中执行以下操作:
CLIPS> (defclass A (is-a USER))
CLIPS> (defclass B (is-a USER))
CLIPS> (bind ?x (make-instance fact1 of A B))
[fact1]
CLIPS> (type ?x)
A B
我知道这是不可能的(见下一个例子)。
CLIPS> (make-instance fact1 of A B)
[PRNTUTIL2] Syntax Error: Check appropriate syntax for slot-override.
是否可以使一个实例具有多种类型,其中一种类型与另一种类型无关(即不是其他类型的 parent 或 child 类型)。如果没有,任何建议将不胜感激。我猜如果这是不可能的,可以用新的 defclass 来完成,它有 parents 类型 A 和类型 B。如果走这条路,会制定一个自动创建的规则一个匿名类型同时具有这两个 parents 被认为是好的风格?或者我应该从根本上改变 class 结构?
希望这很清楚。任何 help/advice 表示赞赏。
在 OOP 中,您有两种方法 "combine" 对象:多重继承或组合。首先,您使用继承自 A
和 B
的 class C
。在后者中,您创建了一个通用对象 C
,它包含从 A
和 B
.
生成的对象的引用
对于多重继承,你可以查看Basic Programming Guide的9.3.1 Multiple Inheritance
章节,了解如何在CLIPS中实现它。
实际上,您需要在 defclass
构造中指定多种类型。
(defclass A (is-a USER))
(defclass B (is-a USER))
(defclass C (is-a A B))
(make-instance c of C)
对于组合,您可以在C
class 中存储A
和B
的实例地址或它们的名称。换句话说,你使一个实例成为其他两个组合的结果。
(defclass A (is-a USER))
(defclass B (is-a USER))
(defclass C (is-a USER)
(slot a)
(slot b))
(make-instance c of C
(a (make-instance a of A))
(b (make-instance b of B)))
一个对象的 type
总是由它的 class 推断出来的。没有 class 定义就无法创建对象。
我有一个来自 OWL ontology 的 class 结构,我希望将其转换为 CLIPS 知识以执行 closed-world 推理。我现有的 class 层次结构具有多个 class 类型的实例。例如,我想在 CLIPS 中执行以下操作:
CLIPS> (defclass A (is-a USER))
CLIPS> (defclass B (is-a USER))
CLIPS> (bind ?x (make-instance fact1 of A B))
[fact1]
CLIPS> (type ?x)
A B
我知道这是不可能的(见下一个例子)。
CLIPS> (make-instance fact1 of A B)
[PRNTUTIL2] Syntax Error: Check appropriate syntax for slot-override.
是否可以使一个实例具有多种类型,其中一种类型与另一种类型无关(即不是其他类型的 parent 或 child 类型)。如果没有,任何建议将不胜感激。我猜如果这是不可能的,可以用新的 defclass 来完成,它有 parents 类型 A 和类型 B。如果走这条路,会制定一个自动创建的规则一个匿名类型同时具有这两个 parents 被认为是好的风格?或者我应该从根本上改变 class 结构?
希望这很清楚。任何 help/advice 表示赞赏。
在 OOP 中,您有两种方法 "combine" 对象:多重继承或组合。首先,您使用继承自 A
和 B
的 class C
。在后者中,您创建了一个通用对象 C
,它包含从 A
和 B
.
对于多重继承,你可以查看Basic Programming Guide的9.3.1 Multiple Inheritance
章节,了解如何在CLIPS中实现它。
实际上,您需要在 defclass
构造中指定多种类型。
(defclass A (is-a USER))
(defclass B (is-a USER))
(defclass C (is-a A B))
(make-instance c of C)
对于组合,您可以在C
class 中存储A
和B
的实例地址或它们的名称。换句话说,你使一个实例成为其他两个组合的结果。
(defclass A (is-a USER))
(defclass B (is-a USER))
(defclass C (is-a USER)
(slot a)
(slot b))
(make-instance c of C
(a (make-instance a of A))
(b (make-instance b of B)))
一个对象的 type
总是由它的 class 推断出来的。没有 class 定义就无法创建对象。