Sumar
Un program Prolog este o bază de cunoștințe formată din:
- Fapte (
facts) — adevăruri de bază în universul programului - Reguli (
rules) — implicații care derivă noi adevăruri din cele existente
În general, o regulă are forma:
Head :- Body.
Citim "Head dacă Body" sau "dacă Body este adevărat, atunci Head". Implicația este de la dreapta (antecedent) la stânga (consecvent).
Un fapt este o regulă fără Body.
Exemplu de bază de cunoștințe
male(sam).
male(oliver).
male(ben).
female(elizabeth).
female(sandra).
parent_of(sandra, sam).
parent_of(sandra, elizabeth).
parent_of(ben, sam).
parent_of(ben, elizabeth).
parent_of(peter, sandra).
Reguli simple
father_of(X, Y) :-
parent_of(X, Y),
male(Y).
Citim: X este tatăl lui Y dacă X este părintele lui Y și Y este bărbat. (Atenție la convenția de citire — vezi Aritmetică și egalitate pentru distincția între = și ==.)
În Body, virgula , se interpretează drept conjuncție (ȘI). Pentru disjuncție (SAU) avem două variante:
happy(elizabeth) :- happy(sandra) ; happy(ben).
sau
happy(elizabeth) :- happy(sandra).
happy(elizabeth) :- happy(ben).
Univers închis
În Prolog toate demonstrațiile sunt făcute într-un univers închis. Dacă nu putem demonstra o proprietate
P, înseamnă doar că nu am reușit să îi găsim demonstrația — nu căPeste falsă.
Atenție la grupare
Din Lab 1:
Important! Predicatele scrise (atât adevărurile cât și regulile de inferență) trebuie să fie grupate după atomii din
Head. În caz contrar, există riscul erorilor de parsare, iar răspunsul dat de Prolog poate fi greșit. Contează ordinea de scriere a clauzelor.
Interogări
O întrebare în Prolog este de forma:
?- p1(t1, ..., tn), ..., pn(t1', ..., tn').
Prolog returnează true sau false. Dacă întrebarea conține variabile, sunt căutate valori care fac toate predicatele să fie satisfăcute. Pentru următoarea soluție, apăsăm ;.
?- parent_of(ben, X).
X = sam ;
X = elizabeth.