Representing Anthropological Knowledge: Calculating Kinship
Michael D. Fischer
Analyzing and Understanding Cultural Codes


Kinship Introduction
Learning Kinship with
the Kinship Editor
Use the Kinship Editor
Kinship Editor Results

Kinship Contents

Trying things out

If you click on the 'All Solutions' button on the Prolog interpreter below, the query, parent(X,Y), to the left of this button is evaluated against a prolog database (the lower window). We are adding a new rule that derives parent from child, which is in the top window.

Try changing the query from parent(X,Y) to child(X,Y), press the 'All Solutions' button, and verify that the same pairs, in reverse order, are identified. For this particular group of people there are 30 parent relationships, and correspondingly there must be 30 child relationships. There are more children than parents, but we are identifying the relationship child and the relationship parent, not the specific number of parents.

If you scroll through the program in the lower window, you will see the data representing each person, and the three additional rules for child, sibling and spouse. From these we will build a set of rules, like parent, that can describe the usual range of genealogical relationships.

You can get different kinds of information depending on how you enter the query (or goal):

    child(mike, george). /is mike the child of george?/
    child(mike, mary). /is mike the child of mary?/
    child(F, george). /who is the child of george?/
    child(mike, K). /mike is the child of who?/
    child(V,L). /who is the child of whom?/

The first query simply evaluates to true, because this is an instance previously supplied to Prolog. The second query evaluates to false. There is no instance which matches 'child(mike,mary)'.

The terms F, K, V and L in the latter three examples are variables. Any term which begins with an uppercase letter (A-Z) is treated as a variable by Prolog. When variables are present, information from each matching instance of the predicate is assigned to the variable from the corresponding position. The latter three will evaluate to true, but the presence of variables in the query will give more information. The third query supplies the additional information that the value of the variable F is 'mike'. The fourth that K is 'george'. The fifth evaluates to true 30 times with the present data, the first time with 'V=george' and 'L=earl', and the second time to 'V=mike' and 'L=george', and so on.

Next section: Basic kin types