Raadplegen van het bestand in PROLOG
Regels in PROLOG
familie persoon persoon
persoon persoon
In PROLOG wordt dit:
Het bestand is bij PROLOG op deze wijze met „feiten" te
vullen, met willekeurige, maar handige, predikaatnamen
als punt, lijn en vlak. Alle „attributen" staan als argu
menten tussen haakjes, gescheiden door komma's. Elk
PROLOG-feit wordt altijd met een punt afgesloten.
De hierboven gevulde database kan als volgt worden ge
raadpleegd.
Stel we willen weten wat de waarden van de attributen
zijn van het punt ,,p2". Dit gebeurt met behulp van de vol
gende ingetoetste vraagstelling:
I?- punt p2, X, Y, Label
(de prompt van de PROLOG-interpretator is ?-)
PROLOG antwoordt:
Label null
Y 166,82
X 132,75
Door ,,p2" op de juiste plaats in te vullen in de structuur
van punt en door (willekeurige) namen of letters (in elk
geval hoofdletters) te kiezen voor de attributen, krijgen
we meteen antwoord.
Zijn we alleen geïnteresseerd in de X- en Y-coördinaat
van een punt, dan dienen we een „regel" in onze databa
se op te nemen. Regels zijn eenvoudig declaraties van re
laties die tussen objecten bestaan. Deze nieuwe regel is
als volgt te definiëren:
De regel bevat een nieuwe predikaatnaam xypunt en de
variabelen P, X, Y en de underscore De wordt
een anonieme variabele genoemd.
Uit de premisse „een punt P met als coördinaten X en Y
waarvan de waarde van het label anoniem mag blijven"
volgt de conclusie: xypunt met betrekking tot P, X en Y.
Vraag: wat zijn de coördinaten van ,,p8"?
In PROLOG: ?- xypunt (p8, X, Y
Antwoord: Y 160,6
X 92,38
Zo ook voor het label van een punt.
Definieer een nieuwe regel met als predikaatnaam label-
punt, als volgt:
labelpunt P, Label :- punt P,Label
Vraag: wat is de hoedanigheid (label) van ,,p8"?
In PROLOG: |?- labelpunt p8, L
Antwoord: L paal
PROLOG zoekt op verzoek naar andere oplossingen, een
eigenschap die in het Engels backtracking („terugkrab
belen") wordt genoemd. Van deze eigenschap kan ge
bruik worden gemaakt bij de volgende vraag: geef alle
puntnummers met het attribuut paal.
In PROLOG: |?- labelpunt Nr, paal
Voor het puntnummer wordt wederom een willekeurige
naam („Nr") gekozen. PROLOG vindt als eerste ant
woord Nr p8 en op verzoek de overige punten met het
attribuut „paal":
Nr p5
Nr p1
no
Alle punten worden in de database afgezocht en gemat-
ched (in logicatermen spreekt men van unificatie met de
doelpropositie) met het attribuut „paal", zodat als eerste
antwoord Nr p8 wordt gevonden, en achtereenvolgens
door herhaalde vraagstelling, in dit geval door het intypen
van een punt-komma de punten p5 en p1Met als laat
ste respons „no": geen verdere antwoorden meer. Merk
op dat deze volgorde dezelfde is als waarmee de punten
in de database liggen opgeslagen.
De lezer zal al hebben begrepen, dat het om een interac
tieve taal gaat: een opdracht wordt meteen uitgevoerd.
Gegevensstructuren in PROLOG
Zoals in de hoofdtekst aangegeven, kan een database in PRO
LOG worden gerepresenteerd als een verzameling feiten. In
het behandelde voorbeeld gaat het om de punten-, lijnen- en
vlakkentabellen van een relationele databestand. Een ander
voorbeeld is een database met personen die men rond een fa
milie gestructureerd kan denken. Iedere familie heeft drie com
ponenten: man, vrouw en kinderen. Omdat het aantal kinderen
variabel is, wordt dit als lijst voorgesteld:
Elke persoon kent weer vier componenten: voornaam, achter
naam, geboortedatum en werkzaamheden. De geboortedatum
kent drie componenten (dag, maand en jaar) en werkzaamhe
den is (1) werkt niet of (2) werkgever en jaarsalaris. Een record
van een dergelijk bestand ziet er dan als volgt uit:
familie
persoon (wim, spoor,
gebdat 24, april, 1946
werktbij ns, 60000
persoon (ans, spoor,
gebdat 21, mei, 1945
werktbij abc, 70000)
persoon jacob, spoor,
gebdat 28, mei, 1976
werktniet),
persoon petra, spoor,
gebdat 21, juli, 1978
werkniet
Een van de aardige dingen in PROLOG is, dat we naar objec
ten kunnen verwijzen zonder alle details van de componenten
van deze objecten te vermelden. We dienen alleen de structuur
van het object aan te geven, de details laten we onbenoemd.
Naar alle families Spoor kunnen we verwijzen met:
familie persoon( spoor,
We zien dat hier de anonieme variabelen van alles zijn: enkel
voudige waarden, structuren en lijsten. Daar hoeven we ons
niet druk over te maken. Zo ook kunnen we verwijzen naar alle
families met drie kinderen:
familie 'I
We geven dus uitsluitend de structuur aan, de inhoud laten we
onbenoemd.
Bron: Prolog Programming for Artificial Intelligence [7],
vlak
v2, weide
vlak
v4, bos
vlak
v1akker
vlak
v3, woest
xypunt P, X, Y :- punt P, X, Y,
358
NGT GEODESIA 89 - 7/8