




 
Defines a rule named 
rule-name
 (which must be distinct from any other rule name, context name or KnowledgeWorks class name). If 
direction
 is 
:forward
 a forward chaining rule is defined, if 
:backward
 a backward chaining rule is defined. If 
doc-string
 is given, then it should be a string. The value can be retrieved by calling the function 
documentation
 with doc-type 
rule
.
A full description is given in Rules.
(defrule move-train :forward :context trains
(train ?train position ?train-pos)
(signal ?signal position ?signal-pos colour green)
(test (= ?signal-pos (1+ ?train-pos)))
-->
((format t "~%Train moving to ~S" ?signal-pos))
(assert (signal ?signal colour red))
(assert (train ?train position ?signal-pos)))
(defrule link-exists :backward
((link-exists ?town1 ?town2)
<--
(or (link ?link town1 ?town1 town2 ?town2)
(link ?link town2 ?town1 town1 ?town2))
(cut))
((link-exists ?town1 ?town2)
<--
(route-exists ?town1 ?town2)))
KnowledgeWorks and Prolog User Guide (Windows version) - 6 Dec 2011