【问题标题】:Is it possible to have an instance of multiple classes in CLIPS?是否可以在 CLIPS 中有多个类的实例?
【发布时间】:2019-10-02 21:59:29
【问题描述】:

我有一个来自 OWL 本体的类结构,我希望将其转换为 CLIPS 知识以执行封闭世界推理。我现有的类层次结构具有多个类类型的实例。例如,我想在 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.

是否可以使实例具有多种类型,其中一种类型与另一种类型无关(即不是其他类型的父类型或子类型)。如果没有,任何建议将不胜感激。我猜这是否不可能,可以使用具有 A 类型和 B 类型的父级的新 defclass 来完成。如果采用这条路线,将制定一个规则,自动创建一个匿名类型,将这两个类型作为父级算不算好作风?还是我应该从根本上改变类结构?

希望这很清楚。感谢您提供任何帮助/建议。

【问题讨论】:

    标签: rdf clips


    【解决方案1】:

    在 OOP 中,您有两种“组合”对象的方式:多重继承或组合。首先,您使用一个类C,它继承自AB。在后者中,您创建一个通用对象C,其中包含来自AB 生成的对象的引用。

    对于多重继承,您可以查看Basic Programming Guide9.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 类中存储AB 的实例地址或它们的名称。换句话说,您将一个实例作为其他两个组合的结果。

    (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 始终由其类推断。没有类定义就不能创建对象。

    【讨论】:

    • 不,我特别不希望 A 类和 B 类相互关联。我想说 fact1 是一个 A 和一个 B 对象,但如果可能的话,不必制作 C。虽然从表面上看,当你创建一个实例时,它只是针对一个特定的类?
    • 相应地修改了答案。
    • 创建实例时,它必须是针对单个特定类的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2013-01-07
    相关资源
    最近更新 更多