Vad om du kunde programmera genom att bara beskriva vad du vill ha gjort, istället för hur det ska göras? Det är tanken bakom logisk programmering. Istället för att skriva steg-för-steg instruktioner skriver du logiska regler och fakta, och låter datorn själv räkna ut hur målet ska uppnås. Prolog, det mest kända logiska programmeringsspråket, låter dig uttrycka kunskap som 'alla fåglar kan flyga' och 'Tweety är en fågel', och sedan automatiskt dra slutsatsen att 'Tweety kan flyga'.
Fördjupning
Logisk programmering baseras på första ordningens logik och använder horn-klausuler för kunskapsrepresentation. Prolog implementerar SLD-resolution (Selected Linear resolution for Definite clauses) med backtracking för att söka lösningar. Program består av fakta och regler, och queries utför logisk härledning. Unifiering är den centrala algoritmen för att matcha termer. Logisk programmering har tillämpningar inom AI, expertsystem och deklarativ problemlösning.
Horn-klausuler och Prolog-syntax
Horn-klausuler är specialfall av logiska klausuler med högst en positiv literal. De bildar grunden för logisk programmering.
Typer av Horn-klausuler
Prolog-program exempel
SLD-resolution och backtracking
Prolog använder SLD-resolution för att systematiskt söka efter bevis genom att matcha mål med klausulhuvuden.
Resolutionsstrategi
Unifiering
Unifiering är processen att hitta substitutioner som gör två termer identiska.
Unifieringsexempel
Vanliga misstag
❌ Infinite rekursion utan basfall
Rekursiva regler måste ha basfall för att terminera
Tillämpningar
Expertsystem
Representation av kunskapsbaserad expertis
Naturlig språkprocessning
Parsing och grammatikregler
Övningar
Skriv Prolog-regler för släktskapsrelationer: förälder, farförälder, syskon
Tips
Använd grundfakta för förälder och definiera andra relationer rekursivt
Visa facit
- förälder(adam, eva).
- farförälder(X, Z) :- förälder(X, Y), förälder(Y, Z).
- syskon(X, Y) :- förälder(Z, X), förälder(Z, Y), X \= Y.
Svar: Regler som bygger på grundrelationen förälder
Sammanfattning
Logisk programmering använder horn-klausuler och SLD-resolution för deklarativ problemlösning. Prolog implementerar denna paradigm med fakta, regler och queries. Unifiering matchar termer och backtracking utforskar sökrymden. Logisk programmering är kraftfullt för kunskapsrepresentation, expertsystem och symbolisk AI.