Another distinction I made was between
``observable'' and
``non-observable'' data. Given an
expert
system
for diagnosing blood infections, it would be reasonable for it to ask
for the patient's age and sex, and for the location of major wounds.
It would be less reasonable for it to ask for the genus and species of the
organisms present in the blood: this can not
be observed directly, and is what the system is
supposed to be inferring. In the animal classifier, I intended the
observable data to be everything about an animal except its
classification, which
is_a
is supposed to find for you.
So to find out what an animal is, first give it an arbitrary name, e.g.
pip
. Then add facts describing what you can observe about it:
gives_milk(pip).and so on. Then ask
is_a( pip, X ).
Try this by inputting three facts to tell Prolog that Pip is (a) feathered; (b) black-and-white; (c) able to swim. Ask what kind of animal he is. Then try the same for a few other animals. This resembles what you did with the skiing advisor.