S = D este adevărat dacă S unifică cu D, caută legări a.î. S să unifice cu D S \= D este echivalent cu \+ S = D S == D verifică dacă S unifică cu D, nu creează legări noi S \== D verifică dacă S nu poate unifica cu D (\+ ==) S is D evaluează aritmetic D și verifică egalitatea cu S și eventual leagă S. S este o variabilă sau o valoare. Operatorii matematici au nevoie ca S și D să fie complet instanțiate (legate) S =:= D evaluează aritmetic expresiile S și D, verifică egalitatea, nu face legări S =\= D evaluează aritmetic expresiile S și D, verifică să nu fie egale < > =< >= Structuri: liste - [], [e1, e2, e3], [h1, h2 | t] tupluri - (e1, e2, e3) compounds (structuri) - struct(val, val, val) inInterval(X0, 2) - inInterval(0, _) --> soluție X=0 ; // mai vreau o soluție - inInterval(X0, 2) * inInterval(Y0, 2) - inInterval(0, _) --> Y0 = 0 --> 0 < 2, X0 is 0+1 -->sol X0 = 1 ; - inInterval(X1, 2) X1 = Y0 * inInterval(Y1, 2) - ininterval(0, _) --> Y1 = 0, 0 < 2, X1 = 1 --> Y0 = 1, sol X0=2 ; - inInterval(X2, 2) X2 = Y1 * inInterval(Y2, 2) - inInterval(0, _) --> Y2=0 -> X2=1 -> X1=2 -> Y0=2, 2 < 2 FALS - inInterval(X3, 2) - inInterval(0 ..... -> Y1=2, 2 < 2 FALS - inInterval(X4, 2) .... myMem(1, [1,2,3,1,4]) myMem(1, [1 | [2,3,1,4]] -> true ; myMem(1, [_ | [2,3,1,4]] myMem(1, [2 | _] FALS myMem(1, [_ | [3,1,4]] ... myMem(1, [1 | [4]] -> true (dar există posibilitatea să mai existe altă soluție) ; myMem(1, [_ | [4]]) myMem(1, [4 | _]) FAIL myMem(1, [_ | []] myMem(1, []) FAIL Operatorul cut anulează toate alternativele de demonstrare ale predicatului curent de la același nivel sau de la niveluri de mai sus în recursivitatea (curentă a) acestui predicat. p p p q r p p p X p p p (p) (p) p X X ! (în condițiile pentru p) X = se anulează alternativa