我一直在研究CLIPS参考手册,并试图了解哪些关键字/名称在哪种上下文中被保留。最初,这是为了弄清楚除了附录 H:保留函数名称中列出的函数之外,还保留了哪些名称。
据我了解,适用以下规则:
test
、and
、or
、not
、declare
、logical
、object
、exists
和forall
》作为任何事实的第一个字段都是非法的;否则,尽管不鼓励,但它们是合法的。name
和 is-a
不能是插槽名称,但在其他情况下似乎是合法名称。然而,CLIPS 存储库中的示例与此相矛盾,因为我在其中看到了 (slot name)
。这里的设计意图是什么?我想知道是否还有更多我错过的规则,或者是否可以说所有其他名称(甚至可能是像
deffacts
这样的名称)在实际用途之外都是合法的。
大多数名称在具有特殊含义的上下文之外都是合法的。因此,符号 is-a 和 name 不能用作 defclass 构造的槽名称(它们用于支持继承和消息传递),但它们可以用作 deftemplate 构造的槽名称(早于 defclass 构造) .
例如,这都是合法的:
CLIPS (6.4.1 4/8/23)
CLIPS>
(defrule defclass
(deftemplate)
(is-a)
(name)
(declare)
(+ 3 4)
(slot)
=>)
CLIPS> (assert (deftemplate) (is-a) (name) (declare) (+ 3 4) (slot))
<Fact-6>
CLIPS> (facts)
f-1 (deftemplate)
f-2 (is-a)
f-3 (name)
f-4 (declare)
f-5 (+ 3 4)
f-6 (slot)
For a total of 6 facts.
CLIPS> (agenda)
0 defclass: f-1,f-2,f-3,f-4,f-5,f-6
For a total of 1 activation.
CLIPS>