I?- Backtracking in PROLOG I ?- c Complexe vragen in PROLOG Door de opdracht te herhalen, zoals hierboven, wordt de complete oplossingsverzameling gevonden. Overigens kan één opdracht betrekking hebben op een zeer groot PROLOG-programma. Met behulp van de in de database opgeslagen feiten zijn (nieuwe) regels te definiëren, die relaties tussen die feiten beschrijven. Eén zo'n relatie is die van omtrekslijn, dat wil zeggen een lijn die behoort tot de omtrek van een vlak. In PROLOG luidt zo'n definitie: omtrekslijn L, VL lijn L, VL, omtrekslijn L, VR lijn L, VR, In woorden (hierbij lezen we van rechts naar links): Indien een lijn L als vlak-links VL heeft (premisse), kun nen we concluderen dat L een omtrekslijn is van VL (eer ste regel) of: Indien een lijn L als vlak-rechts VR heeft (premisse), kun nen we concluderen dat L een omtrekslijn is van VR (tweede regel). Met deze definitie kunnen de volgende vragen worden beantwoord: Vraag: Is Ii02 een omtrekslijn van v2? In PROLOG: |?- omtrekslijn Ii02, v2 Antwoord: yes Vraag: Is Ii05 een omtrekslijn van v4? In PROLOG: |?- omtrekslijn M05, v4 Antwoord: no Vraag: Ligt punt p8 op de omtrek van vlak v4? In PROLOG: |?- omtrekspunt p8, v4 Antwoord: yes Vraag: Ligt punt p3 op de omtrek van vlak v1? In PROLOG: |?- omtrekspunt p3, v1 Antwoord: no Vraag: Welke vlakken hebben punt p5 op hun omtrek? In PROLOG: |?- omtrekspunt p5, Vlak Antwoord: Vlak v1 Vlak v2 Vlak v4 no Vraag: Welke punten heeft vlak v4 als omtrek? In PROLOG: Antwoord: P P8 P P2 P P1 P P5 no Bij raadpleging van de database wordt in PROLOG altijd nagegaan of meerdere antwoorden op de vraagstelling van toepassing zijn (backtracking) Hierboven zijn reeds enige voorbeelden gegeven. De raadpleger van de data base kan ook van tevoren opgeven dat hij alle antwoor den tegelijkertijd wil weten. Dit gebeurt door een nieuwe regel alleOmtrekslijnen te definiëren en hierbij gebruik te maken van het zogenoemde systeem predikaat „findall". Bijvoorbeeld: alleOmtrekslijnen Vlak, Lijst:- findall L, omtrekslijn L, Vlak), Lijst Vraag: Welk vlak heeft Ii10 als omtrek? In PROLOG: |?- omtrekslijn li 10, Vlak Antwoord: Vlak v3 Vlak v4 no Vraag: Wat is de omtrek van v1? In PROLOG: Antwoord: L N06 L IÏ01 L Ii04 L M07 no Een andere relatie is die van omtrekspunt, dat wil zeg gen een punt dat ligt op de omtrek van een vlak. In PROLOG definiëren we twee regels: omtrekspunt BP, VL :- lijn BP, VI omtrekspunt EP, VR :- lijn EP, VR, Of in woorden: Van een (willekeurige) lijn ligt het punt BP op de omtrek van vlak VL (eerste regel); dit geldt even eens voor het punt EP met betrekking tot het vlak VR (tweede regel). Evenals bij de relatie omtrekslijn kunnen bij de relatie omtrekspunt dezelfde vragen worden gesteld: NGT GEODESIA 89 - 7/8 Of in woorden: Zoek alle findall) omtrekslijnen L op van Vlak en berg die op in Lijst. Vraag: Wat zijn de omtrekslijnen van vlak v1? In PROLOG: |?- alleOmtrekslijnen v1, Lijst Antwoord: Lijst Ii06, Ii01, Ii04, Ii07 In het reeds aangehaalde artikel van Van der Schans [1] komt ook de vraag voor: welke zijn de grenslijnen tussen bos en weide? Met het volgende PROLOG-programma kan deze com plexe vraag (gemakkelijk) worden beantwoord. Eerste moeten we via de vlakkentabel informatie krijgen over de cultuur (vlaklabel) van een vlak in relatie tot een lijn. Daartoe worden de nieuwe regels cultuurLinks en cultuurRechts gedefinieerd: cultuurLinks Cultuur, Lijn :- lijn Lijn, VL, vlak VL, Cultuur cultuurRechts Cultuur, Lijn :- lijn Lijn, VR, vlak VR, Cultuur Of in woorden: Als vlak VL met label Cultuur vlak-links is van de lijn Lijn, dan is Cultuur de cultuur-links van Lijn (eerste regel). 359

Digitale Tijdschriftenarchief Stichting De Hollandse Cirkel en Geo Informatie Nederland

(NGT) Geodesia | 1989 | | pagina 23