fun( X ) :- red( X ), car( X ). fun( X ) :- blue( X ), bike(X). /* database of red items */ red( apple_1 ). /* first choice */ red( block_1 ). red( car_27 ). car( desoto_48 ). /* database of cars */ car( edsel_57 ).
red( apple_1 ). /* database of red items */ red( block_1 ). red( car_27 ).The first red item that we find is
apple_1
.
This gives us the instantiation X=apple_1
.
Next we have to see if this is a car, so we ask the question car(apple_1)
.
Does car(apple_1)
match with our existing database of facts about cars?
car( desoto_48 ). /* database of cars */ car( edsel_57 ).The answers is that it will not.
apple_1
will not match with desoto_48
or with edsel_57
.
So what do we do next?
In such cases, Prolog backtracks in order to find another solution.
Thus we go back to the red
database, and see if we can find another possible solution.
In this case we can
red( apple_1 ). red( block_1 ). /* second choice */ red( car_27 ).We can use the next clause and see if
block_1
is a red car.