Kennismaken met Prolog door middel van kennisbanken

Creative Commons License
This work is licensed under a
Creative Commons Attribution-NonCommercial-ShareAlike 4.0
International License
.

Auteur

John Val
Kennisbanken Familie Feiten, regels en vragen

Wat leer je in dit hoofdstuk:

Kennisbanken

Een kennisbank is een gespecialiseerde databank voor de opslag en het beheer van 'kennis'. Een kennisbank is de basis voor een verzameling van kennis. Een kennisbank zou kunnen zijn de databank waarin ouders hun kinderen aanmelden. Met deze kennisbank kun je dan een familiestamboom opzetten. Een andere kennisbank zou kunnen worden opgezet om de vogels van Europa in te beschrijven. Met deze twee voorbeelden zullen we jouw kennis over Prolog proberen te vergroten en kijken of je de persoon in de figuur hiernaast zou kunnen helpen.

Familie

Een kind heeft bij geboorte ouders, een geslacht, een naam, een geboortedatum, een geboortegewicht. We houden het, om te beginnen met Prolog, zo eenvoudig mogelijk en kijken voorlopig alleen naar ouder en geslacht. De geboorte van een kind is een feit. het geslacht van het kind is op dat moment een feit (later misschien niet meer) evenals de ouders een feit zijn.

Feiten dat is waar het in Prolog om draait. Op basis van logische regels kunnen we op basis van die feiten conclusies trekken.

Een paar blijde gebeurtenissen in een lijstje:

Feiten (facts), regels (rules) en vragen (queries)

Prolog code kennisbank geboorten
% kennisbank geboorten
	
persoon(geert,man).
persoon(bert,man).
persoon(madelief,vrouw).
persoon(louise,vrouw).
persoon(patrick,man).
persoon(karin,vrouw).
persoon(sylvia,vrouw).
persoon(karel,man).
persoon(harry,man).
persoon(johan,man).
persoon(truus,vrouw).

kindVan(geert,harry).
kindVan(geert,louise).
kindVan(bert,patrick).
kindVan(bert,karin).
kindVan(madelief,patrick).
kindVan(madelief,karin).
kindVan(karin,karel).
kindVan(karin,sylvia).
kindVan(sylvia,truus).
kindVan(sylvia,johan).
kindVan(harry,johan).
kindVan(harry,truus).
	

Hoe krijgen we deze blijde gebeurtenissen in Prolog?

In deze cursus gaan we aan de slag met SWI-Prolog en wel met de online versie hiervan SWISH. Open SWISH druk in het scherm op Empty en Create daarna een Program en lees verder.

Prolog is gekoppeld aan logica, er zijn waarheden( = feiten = facts ) en bij redeneringen over die waarheden ( = regels = rules ) mag er niet aan de waarheid worden getoornd. Uit de opgeslagen feiten kun je met behulp van de regels logische vragen stellen. Een feit zelf is de meest simpele regel in Prolog. In het volgende hoofdstuk zullen we dieper op regels ingaan. Een logische vraag heeft als antwoord waar (true) of niet waar (false).

We gaan nu eerst de feiten uit de lijst in Prolog invoeren. In het venster hiernaast zijn de feiten uit de geboortenlijst naar Prolog vertaald. Merk alvast op dat alle namen zonder hoofdletter zijn geschreven en dat iedere feit met een punt eindigt. Kopieer deze lijst in het Program deel van het venster.

Voor we dieper ingaan op de manier waarop we bovenstaande de feiten hebben ingevuld, gaan we een aantal simpele vragen aan deze kennisbank te stellen. Kopieer één van de feiten (b.v. kindVan(karin,karel). ) naar het deelvenster met ?- aan de linkerkant en druk op Run.
In het deelvenster boven het deelvenster met de vraag krijg je dan het antwoord te zien. In dit geval dus True (=waar).

In de opdrachten heb je gezien dat je ook vragen kunt stellen waar meerdere antwoorden tevoorschijn komen. De antwoorden die je krijgt, maken alle deel uit van de kennisbank. Als je al iets weet van relationele databases dan zul je van deze resultaten niet erg onder de indruk zijn. Prolog zal je zeker niet inzetten als het bij dit soort simpele vragen blijft. Kunnen we ook simpel een vraag stellen, als wie is de oma van Geert? Heeft Geert zussen of broers of neven of nichten? Voor we deze vragen gaan stellen moeten we wat meer over de elementen in de taal Prolog leren. Waarom kunnen we geen hoofdletters voor de namen van de personen gebruiken en waarom moest er wel een hoofdletter in "Naam" gebruikt worden om de namen van alle mannen te krijgen?
Snel naar het volgende hoofdstuk om meer over de grammatica van Prolog te leren.