Rule V
All identically-named variables within a particular rule (e.g. all occurrences of, say, X
in the first fun
rule below) are constrained to have one and the same instantiation for each solution to a particular query.
Identical variable names in separate rules are totally independent, just as if different variable names had been used.
To give an example:
The program
fun( X ) :- red( X ), car( X ).
fun( X ) :- blue( X ), bike( X ).
is the same as the program
fun( X_1 ) :- red( X_1 ), car( X_1 ).
fun( X_2 ) :- blue( X_2 ), bike( X_2 ).
Thus variable name scoping is per-individual rule (often called a clause).
The same variable name may appear in different clauses of a rule, or rules with different names.
Each time it is treated as something specific to its context.
A variable X
may occur in the program many times with many different bindings.
It will only have the same bindings when you tell it to.
Examples of Rule I
Consider the following program:
fun( X ) :- red( X ), car( X ).
fun( X ) :- blue( X ), bike( X ).
car( vw_beatle ).
car( ford_escort ).
bike( harley_davidson ).
red( vw_beatle ).
red( ford_escort ).
blue( harley_davidson ).
Above is both our previous program for finding fun items and facts describing some red and blue items and some cars and bikes.