Prologo (programlingvo)

El Vikipedio, la libera enciklopedio

Prolog, "PROgramado en LOGiko", aŭ Prologo estas programlingvo bazita sur la predikatkalkulo. En la 1970-aj jaroj, ĝi estis uzata precipe en projektoj de artefarita intelekto en Japanio. (Ial, en Usono kaj Eŭropo oni preferis Lispon por la sama fako.)

Programo en Prolog estas kolekto de asertoj kaj reguloj. La asertoj konsistas el predikatoj, logikaj operacisimboloj kaj konstantoj, kiuj kune formas datumbazon. La reguloj havas la formon de Horna esprimo.

Malgraŭ ĝia simpla kaj pure logika bazo, Prolog uzindas por diversaj specoj de programaro. Iam estis malvaste konata programo por instrui Esperanton al hispanparolantoj farita en Prolog.

Prolog estas utila por limiglogika programado (Constraint Logic Programming).

Jen simpla montra programo kun klarigoj:

%%%%% Asertoj

ino(katrino).                          % Katrino estas ino.
ino(elizabeto).                        % Elizabeto estas ino.
ino(anabelo).                          % Anabelo estas ino.

viro(georgo).                          % Georgo estas viro.
viro(johano).                          % Johano estas viro.
viro(benjameno).                       % Benjameno estas viro.

ido(benjameno, georgo).                % Benjameno estas ido de Georgo.
ido(katrino, georgo).                  % Katrino estas ido de Georgo.
ido(elizabeto, anabelo).               % Elizabeto estas ido de Anabelo.

gefratoj(georgo, anabelo).             % Georgo kaj Anabelo estas gefratoj.

%%%%% Reguloj

gefratoj(X,Y) :- ido(X,Z), ido(Y,Z),   % Se X kaj Y havas saman patr(in)on 
                 X \= Y.               % kaj ne estas sama persono,
                                       % estas gefratoj.

patro(X,Y) :-  ido(Y,X), viro(X).      % Se Y estas ido de X, kaj se X estas
                                       % viro, X estas la patro de Y.

patrino(X,Y) :- ido(Y,X), ino(X).      % Se Y estas ido de X, kaj se X estas
                                       % ino, X estas la patrino de Y.

fratino(X,Y) :- ino(X), gefratoj(X,Y). % Se X estas ino, kaj se X kaj Y estas
                                       % gefratoj, X estas la fratino de Y.

onklo(X,Y) :- gefratoj(X,Z), ido(Y,Z), % Se X kaj Z estas gefratoj, kaj se Y estas
              viro(X).                 % ido de Z, kaj se X estas viro, X estas
                                       % la onklo de Y.

nevino(X,Y) :- ino(X), onklo(Y,X).     % Se X estas ino, kaj se Y estas la onklo
                                       % de X, X estas la nevino de Y.

gekuzoj(X,Y) :- ido(X,A), ido(Y,B),    % Se X estas la ido de A, kaj se Y estas
                gefratoj(A,B).         % ido de B, kaj se A kaj B estas gefratoj,
                                       % X kaj Y estas gekuzoj.

Do, se oni tajpus patrino(anabelo, elizabeto)., la programo respondus Jes. Se oni tajpus fratino(benjameno, elizabeto)., la programo respondus Ne.

Eksteraj ligiloj