The KnowledgeWorks Backward Chainer indexes clauses for a backward rule based on the first argument. If the first arguments to backward rule clauses are distinct non-variables, the backward chainer can pre-select possible matching clauses for a call.
For example, in the following rule:
(defrule age-of :backward
((age-of charlie 30) <--)
((age-of william 25) <--)
((age-of james 28) <--))
(age-of james ?x)
would jump directly to the third clause and bind
to 28 without trying the other two.
(age-of tom ?x)
would fail immediately without doing any pattern matching.
Clauses are distinguished first by the types and then the values of their first arguments.
KnowledgeWorks and Prolog User Guide (Unix version) - 6 Dec 2011