(:srules fterm rule )
These two forms add rules, associated with the frame referred to by
fterm, to the knowledge-base. The only difference
between them is the way in which the rules are indexed (and therefore
in the way they will later be accessed). Consider a query of (r
frame1 ?x) (assertions are similar). Such a query will access rules
from several sources:
- It will access slot rules (rules added using
:srules) associated with the slot r.
- It will access `normal' rules (rules added using
:rules) associated with any set which frame1 is a member of
(i.e., rules associated with any frame f such that (isa
frame1 f) is a fact in the knowledge-base).
- Finally, it will access slot rules associated with any set that
the slot r is known to be a member of.
As an example of a set of slots, consider the set
transitive-relations . For this set one
might want a rule like:
((?r ?x ?z) <- (?r ?x ?y) (?r ?y ?z)))
One could then assert that (isa (:slot less)
transitive-relations) and the rule above would enable Algernon to
conclude (less frame1 frame3) from (less frame1 frame2)
and (less frame2 frame3).
Note that this rule for transitive relations has a variable in the
slot position. Such rules are called generic
rules and can be associated with sets of frames
or slots (though obviously not with individual slots). Recall that
at the time of a query or assertion, both the frame and the slot
being accessed are known.