NextPrevUpTopContentsIndex

defrule

Macro
Summary

Defines a rule.

Signature

defrule rule-name direction [doc-string] &rest body => rule-name

Arguments

rule-name

A symbol.

direction

Either :forward or :backward .

doc-string

An optional string.

body

Forms as described in Rules.

Values

rule-name

A symbol.

Description

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.

Examples
(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 (Unix version) - 29 Feb 2008

NextPrevUpTopContentsIndex