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

Digitale Tijdschriftenarchief Stichting De Hollandse Cirkel en Geo Informatie Nederland

(NGT) Geodesia | 1989 | | pagina 22