An introduction to Artificial Intelligence. Finlay and Dix. 1st Edition.

network.p

download

Header

%  =================================================================
%  ==                                                             ==
%  ==          An Introduction to ARTIFICIAL INTELLIGENCE         ==
%  ==                  Janet Finlay and Alan Dix                  ==
%  ==                       UCL Press, 1996                       ==
%  ==                                                             ==
%  =================================================================
%  ==                                                             ==
%  ==    chapter 1, page 22:  semantic networks and inheritance   ==
%  ==                                                             ==
%  ==            Prolog example, Alan Dix, August 1996            ==
%  ==                                                             ==
%  =================================================================

Code

class(canine).
class(wolf).
class(dog).
class(great_dane).
class(rottweiler).
class(basenji).
object(scooby_do).
object(shaggy).
class(cartoon_character).

is_a(wolf,canine).
is_a(dog,canine).
is_a(great_dane,dog).
is_a(rottweiler,dog).
is_a(basenji,dog).
instance(scooby_do,great_dane).
instance(scooby_do,cartoon_character).
instance(shaggy,cartoon_character).

prop(canine,carnivorous,true).
prop(wolf,is_wild,true).
prop(dog,has_tail,true).
prop(dog,barks,true).
prop(dog,legs,4).
prop(great_dane,height,tall).
prop(rottweiler,has_tail,false).
prop(basenji,barks,false).
prop(scooby_do,colour,brown).
prop(shaggy,owns,scooby_do).
prop(cartoon_character,is_drawn,true).


has_prop(OC,P,V)  :-  prop(OC,P,V).
        %  classes or objects
has_prop(O,P,V)   :-  instance(O,C), has_prop(C,P,V), \+ prop(O,P,V1).
        %  inheritance rule for objects
        %  note that this only comes into effect if there is no
        %  declared property for the object.
        %  If the 'not prop' part were absent, Prolog would be able
        %  to succeed twice on the predicate, the second time returning
        %  the property of the parent.
        %  It is also important that the negated predicate comes last
        %  so that queries where P is uninstantiated work (as in the 
        %  suggested list of all properties below).
has_prop(C1,P,V)  :-  is_a(C1,C2), has_prop(C2,P,V), \+ prop(C1,P,V1).

Running this Code

%  RUNNING THIS CODE
%
%  Look for properties of individual objects and classes.
%  For example: 'has_prop(scooby_do,carnivorous,X).'
%  Alternatively, just list all properties of a single
%  object or class:  'has_prop(basenji,P,X).'
%  Or even list all properties:   'has_prop(Z,P,X).'
%

Examples

%  EXAMPLES
%
%>  has_prop(scooby_do,carnivorous,X).
%
%>  has_prop(basenji,P,X).
%
%>  has_prop(Z,P,X).

Query

Response