Prolog (programspråk)

Prolog, ett programspråk för logikprogrammering. Prolog skiljer sig från de flesta andra programspråk i och med att det bygger på logiska uttryck och inte på instruktioner för datorn. Prolog används främst inom områdena artificiell intelligens och språkbehandling.

Att programmera i Prolog liknar inte riktigt program skrivna i programspråk som till exempel C; språket är uppbyggt så att man i sitt program definierar klausuler som returnerar sant eller falskt. Man ställer sedan frågor till systemet som med hjälp av de klausuler man definierat kan dra slutsatser och svara på frågor.

Prolog i Sverige

Prolog var en av de tidiga forskningsinriktningarna på Swedish Institute of Computer Science (SICS) från år 1985 och framåt. Arbetet inspirerades av en internationell uppmärksamhet runt Prolog då detta användes för femte generationens datorer av det japanska Institute for New Generation Computer Technology (ICOT), en organisation som var Japans motsvarighet till SICS. Redan 1985 påbörjades en implementering av Prolog som resulterat i SICStus Prolog, en Prolog-dialekt, kompilator och virtuell maskin för Prolog som ännu utvecklas. Runt 1991 började denna användas för flera projekt relaterade till villkorsprogrammering (constraint programming).

Datatyper 
Prolog har inte några typer, den data som används är antingen obundna variabler, atomer med något värde, variabler bundna till atomer eller listor av de tidigare nämnda.

En lista används lätt som en stack då listans definition är ett huvud och en svans, det finns även ett specialfall av listor kallade differenslistor i vilka man även kan lagra obundna variabler och på så sätt få direkt åtkomst även till listans bakre element (om man till exempel vill implementera en kö där element skall läggas till slutet av listan).

Exempel 
Nedan följer ett exempel på prologkod som definierar och visar följande:
Allt efter % räknas 
 Frukter är ätbara,
 Avokado är en frukt.

Således är avokado ätbar.ätbar(X) :- frukt(X).    % man kan äta frukt.
frukt(avokado).          % avokado är en frukt.Man kan därefter fråga prolog följande:?- ätbar(avokado).     % kan man äta avokado?
yesBaserat på vad man definierat kan Prolog dra slutsatsen att avokado går att äta. Men skulle vi i samma program fråga om man kan äta jordgubbe skulle man få svaret att det inte går, eftersom vi inte har definierat detta i världen.?- ätbar(jordgubbe).     % kan man äta jordgubbe ?
noProlog kan även ge lösningar till ens frågor. I exemplet kan vi fråga efter vad kan man äta och vad som är frukt.?- ätbar(X).     % vad är ätbart?

X = avokado 
?- frukt(X).     % vad är frukt?

X = avokado Skulle vi modifiera programmet så att vi även skulle inkludera jordgubbe i frukt (och därmed även i ätbar) får vi ett svar som följande?- frukt(X).        % vad är frukt?

X = avokado ; n     % avokado är frukt (vi trycker n för att få fler lösningar)

X = jordgubbe       % jordgubbe är fruktDär n:et är den tangent vi trycker för att få fler svar. Detta kan dock variera av olika implementationer av Prolog, men alla bör ge svar som ovan. Skulle vi trycka y-tangenten skulle vi inte få jordgubbe som förslag.

Mer information 
 Patrick Blackburn, Johan Bos, Kristina Striegnitz: Learn Prolog Now! College Publications, 2006, 
 Paul Brna, "Prolog programming - A first course", fritt tillgänglig via WWW
 Ivan Bratko, PROLOG - Programming for Artificial Intelligence,

Referenser

Programspråk
Logik