Prolog (programspråk)
Prolog | |
Paradigm | Logikprogrammering |
---|---|
Gavs ut | 1972 |
Skapat av | Alain Colmerauer, Robert Kowalski |
Datatypsdisciplin | otypat |
Implementationer | GNU Prolog, SWI-Prolog |
Dialekter | ISO Prolog, Edinburgh Prolog |
Influerat | Clojure |
Standardfiländelse(r) | .pl, .pro, .P |
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
[redigera | redigera wikitext]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.[1] 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).[2]
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 kö 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: 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?
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
Referenser
[redigera | redigera wikitext]- ^ Myers, J. Paul; Yamakoshi, Kayako (2020). ”The Japanese Fifth Generation Computing Project: A Brief Overview”. Journal of Computing Sciences in Colleges (ACM) 36 (2): sid. 55. ISSN 1937-4771. https://dl.acm.org/doi/10.5555/3447065.3447072. Läst 21 maj 2021.
- ^ Carlsson, Mats; Mildner, Per (25 november 2010). ”SICStus Prolog -- the first 25 years”. Theory and Practice of Logic Programming 12. doi:. https://www.researchgate.net/publication/47822182_SICStus_Prolog_--_the_first_25_years. Läst 30 mars 2023.