%% Observați diferențele dintre unificare și testarea echivalenței: % ?- X = Y. % X = Y. % ?- X == Y. % false. %% Observați diferențele dintre ==/2, =/2, =:=/2 și is/2 %% (echivalență, unificare și evaluari aritmetice). % ?- X = 1 + 2. % X = 1+2. % ?- X == 1 + 2. % false. % ?- X is 1 + 2. % X = 3. % ?- X =:= 1 + 2. % ERROR: =:=/2: Arguments are not sufficiently instantiated %% Predicatele pot fi adevărate sau false, ele nu pot întoarce valori. %% Rezultatul obținut va fi unul din argumentele predicatului. %% Pentru claritate, antetele predicatelor se scriu sub forma: %% modulo(+X,+Y,-Z) %% pentru a diferenția intrarile (+) de iesiri(-). %% Acele argumente care pot fi fie intrări, fie ieșiri se prefixează cu '?'. modulo(X,Y,X) :- X=Y, X1 is X-Y, modulo(X1,Y,Z). %% Dacă folosim cut, se va incerca satisfacerea celei de-a %% doua reguli doar atunci cand X=Y, precum în cazul anterior. %% Predicatul cut ne poate ajuta la optimizarea codul scris %% de noi, împiedicând resatisfacerea anumitor predicate. modulo1(X,Y,X) :- X