未定义变量 * 在 defrule 的 RHS 中引用

问题描述 投票:0回答:1

我有这些事实

(person "Mark")
(person "Nail")
(person "Stark")
(person "Maria")

(married "Stark" "Maria")

我定义了以下规则

(defrule single
(not (married ?x ?))
(not (married ? ?x))
=> (assert (single ?X)))

这给了我以下错误:

如果 defrule 则未定义变量 ?x 在 RHS 中引用

一切正常,为什么我使用这个:

(defrule single
(person ?x)
(not (married ?x ?))
(not (married ? ?x))
=> (assert (single ?X)))

为什么?

clips expert-system
1个回答
0
投票

非条件元素(CE)是存在查询。它检查是否没有与 CE 匹配的事实。如果没有任何内容与非 CE 匹配,则该 CE 内部绑定的变量在 CE 外部没有任何意义。

此对话说明了您的第一条规则的问题:

Person 1: Do you know anyone who's married?
Person 2: No.
Person 1: OK, then that person is single.

“那个人”这个短语在这里没有意义,因为“任何人”并不指特定的人。

您的第二条规则有效,因为第一个模式与后续模式可以引用的特定人员相匹配:

Person 1: Do you know a person?
Person 2: Yes.
Person 1: Is that person married?
Person 2: No.
Person 1: OK, then that person is single.
© www.soinside.com 2019 - 2024. All rights reserved.