忽略 Defrule CLIPS 中的类似事实

Ignoring similar facts in Defrule CLIPS

我正在尝试使用 CLIPS 创建一个家谱程序。

我是 CLIPS 的新手,在我创建的 defrule 之一中遇到一些操作困难。

我要执行的操作是为彼此是兄弟姐妹的 children 创建事实。因此,对于每对 children,我希望程序生成 2 个新的兄弟姐妹事实 。但是该程序似乎生成了 4 个 - 它还 将每个 child 列为自己的同级 ...

我尝试用谷歌搜索解决方案,但我不知道如何让计算机不启动 if(?cn == ?sn)。

有人可以帮忙吗?

(deftemplate siblings
    (slot subject-name)
    (slot sibling-name)
)   

(defrule set-siblings
    (child
        (child-name ?cn)
        (parent-name ?p))
    (child
        (child-name ?sn)
        (parent-name ?p))
    =>
    (assert (siblings 
            (subject-name ?cn)
            (sibling-name ?sn))
)

修改您的第二个模式,使 child 匹配的名称必须不同于第一个模式中绑定的名称:

(defrule set-siblings
    (child
        (child-name ?cn)
        (parent-name ?p))
    (child
        (child-name ?sn&~?cn)
        (parent-name ?p))
    =>
    (assert (siblings 
            (subject-name ?cn)
            (sibling-name ?sn))
)