Prolog (programspråk)

Från Wikipedia
Hoppa till: navigering, sö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.

Datatyper[redigera | redigera wikitext]

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 där element skall läggas till slutet av listan).

Exempel[redigera | redigera wikitext]

Nedan följer ett exempel på prologkod som definierar och visar följande:

  • 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?
yes

Baserat 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 ?
no

Prolog 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 frukt

Dä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[redigera | redigera wikitext]

  • Patrick Blackburn, Johan Bos, Kristina Striegnitz: Learn Prolog Now![1] College Publications, 2006, ISBN 1-904987-17-6
  • Paul Brna, "Prolog programming - A first course"[2], fritt tillgänglig via WWW
  • Ivan Bratko, PROLOG - Programming for Artificial Intelligence, ISBN 0-201-40375-7