PROLOG
PROgramming in LOGic. Et programmeringssprog, beregnet til logikprogrammering, udviklet i Frankrig af Alan Colmerauer og Phillipe Roussel i 1971. Et PROLOG-program skrives som en række logiske udsagn (se prædikatlogik), udformet som såkaldte Horn-klausuler. En typisk Horn-klausul har formen:
A hvis B1 og B2 og ... og Bn.
Her er A og B1, B2, ... , Bn logiske udsagn, der kan være sande eller falske. "og" er den Boole'ske operation AND. Klausulen skal opfattes således, at A er sand, hvis alle B1, ... , Bn er sande. Et eksempel på en Horn-klausul er:
søn(X,Y) hvis far(Y,X) og mand(X)som er en kodning af reglen
X er søn af Y, hvis Y er far til X, og X er en mand.Reglerne eller klausulerne i PROLOG opfattes på formuleringstidspunktet som erklæringer om logiske sammenhænge, der gælder i det "mini-univers", vi søger at repræsentere i computeren. Computeren kan imidlertid fortolke reglerne som programmer (procedurer) og herved søge efter værdier for de variable (i eksemplet ovenfor X og Y), som gør klausulerne sande (instantiering af variable). Fortolkningsprocessen betragter alle programmets Horn-klausuler og forsøger gennem dybde-først-træsøgning og parring af navne på relationer (som "søn" og "far" ovenfor) at bevise, at det udsagn, vi opstiller som mål, er sandt. Tilføjes til klausulen ovenfor to klausuler "far('Søren','Peter')" og "mand('Peter')" og man opstiller målet "søn(X,'Søren')?", vil PROLOG-fortolkeren svare "X='Peter'". Vi har dermed på spørgsmålet "findes der en søn af Søren, og i bekræftende fald, hvad hedder han?" fået svaret "der findes i hvert fald en søn, der hedder Peter".
Man kan også spørge "søn('Peter',Z) ?" eller "søn(U,V) ?" og få alle de mulige korrekte svar (der kunne være flere svar til det sidste spørgsmål, hvis databasen var større).
Prolog arvede mange gode egenskaber fra logikprogrammering, f.eks. deklarativ programmering. Derfor er det muligt at opstille et mål (spørgsmål) med flere forskellige inddata/uddatamønstre og få flere svar, hvis der er flere løsninger. Prolog er også et generelt programmeringsprog, der er velegnet til 'rapid prototyping', dvs. hurtig modellering/programmering og inkremental programudvikling.
Prolog selv kan nemt udvides med højere niveaubegreber og programmeringselementer; der er f.eks. gode objektorienterede udvidelser og ekspertsystemskaller bygget oven på Prolog-systemer. PROLOG kan også opfattes som en stærk generalisering af relationelle databaser, udvidet med funktorer (komplekse datastrukturer), begrebsdefinitioner, ræsonnementer, og med komplette programmerings- og metaprogrammeringsfaciliteter. Se prædikatlogik og logikprogrammering.
