Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: Prolog

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.

Esimerkki: Tekstin tulostus

Seuraava kysely tulostaa rivin tekstiä:

?- writeln('Hauskaa joulua!').
Hauskaa joulua!

Esimerkki: Fibonaccin luvut

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

Esimerkki: Pohjoismaat

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 ;

Hauska tietää

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".

Linkkejä

Tietoa sivustosta