Prologo (programlingvo)
Prologo (angle Prolog, etimologie "PROgramado en LOGiko") 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 Prologo 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, Prologo uzindas por diversaj specoj de programaro. Iam estis malvaste konata programo por instrui Esperanton al hispanparolantoj farita en Prologo.
Prologo 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.