Kirjoittaja: Antti Laaksonen (10.12.2009)
Prolog on 1970-luvulla syntynyt logiikkaohjelmointikieli, jolla laaditut ohjelmat muodostuvat säännöistä ja kyselyistä. Säännöt määrittelevät, missä suhteessa asiat ovat toisiinsa, ja kyselyjen avulla voi tutkia näitä suhteita.
Prologin yleinen käyttökohde on tekoälyn ohjelmointi: Säännöt kuvaavat tekoälyn tietoja maailmasta ja sen käytettävissä olevia päättelytapoja. Kyselyjen kautta käyttäjä pystyy keskustelemaan tekoälyn kanssa.
Seuraava kysely tulostaa rivin tekstiä:
?- writeln('Hauskaa joulua!'). Hauskaa joulua!
Seuraava sääntö määrittelee Fibonaccin luvut:
fibo(1, 0). fibo(2, 1). fibo(Kohta, Tulos) :- Kohta > 2, Kohta2 is Kohta - 2, fibo(Kohta2, Tulos2), Kohta1 is Kohta - 1, fibo(Kohta1, Tulos1), Tulos is Tulos1 + Tulos2.
Tämän jälkeen voi esimerkiksi kysyä, mikä on 4. tai 9. Fibonaccin luku:
?- fibo(4, X) X = 2
?- fibo(9, X) X = 21
Seuraavan säännön avulla saa selville Fibonaccin luvut tiettyyn rajaan asti:
lista(Kohta, Raja) :- fibo(Kohta, Tulos), Tulos < Raja, writeln(Tulos), Uusi is Kohta + 1, lista(Uusi, Raja).
Sääntö etsii annetun Fibonaccin luvun, tarkistaa, ettei se ole liian suuri, tulostaa luvun ja siirtyy seuraavaan lukuun.
Tässä ovat Fibonaccin luvut, jotka ovat alle 100:
?- lista(1, 100). 0 1 1 2 3 5 8 13 21 34 55 89
Seuraavat säännöt sisältävät tietoa Pohjoismaista:
kuuluu(pohjoismaat, islanti). kuuluu(pohjoismaat, norja). kuuluu(pohjoismaat, ruotsi). kuuluu(pohjoismaat, suomi). kuuluu(pohjoismaat, tanska). kuuluu(islanti, reykjavik). kuuluu(norja, oslo). kuuluu(ruotsi, göteborg). kuuluu(ruotsi, malmö). kuuluu(ruotsi, tukholma). kuuluu(suomi, helsinki). kuuluu(suomi, tampere). kuuluu(suomi, turku). kuuluu(tanska, kööpenhamina). osana(X, Y) :- kuuluu(X, Y). osana(X, Y) :- kuuluu(X, Z), osana(Z, Y).
Nyt esimerkiksi seuraavat kyselyt ovat mahdollisia:
?- osana(suomi, X). X = helsinki ; X = tampere ; X = turku ;
?- osana(X, tukholma). X = ruotsi ; X = pohjoismaat ;
?- osana(pohjoismaat, X), not(kuuluu(pohjoismaat, X)), not(kuuluu(suomi, X)). X = reykjavik ; X = oslo ; X = göteborg ; X = malmö ; X = tukholma ; X = kööpenhamina ;
Ranskan kielessä sanojen järjestys poikkeaa toisinaan totutusta: esimerkiksi puolustusliitto NATO on ranskaksi OTAN. Prologin juuret ovat Ranskassa, mikä selittää sen nimen: ranskaksi logiikkaohjelmointi on "programmation en logique".