q(5). p(X) :- q(r(X, X)). % r nu este un predicat, iar r(X, X) nu este apelul unui predicat, ci este o structură (compound) incList(L, L) :- L = []. incList([H|T], [HInc|TInc]) :- HInc is H + 1, incList(T, TInc). incListT([], Acc, Rezultat) :- reverse(Acc, Rezultat). incListT([H|T], Acc, Rezultat) :- HInc is H + 1, incListT(T, [HInc | Acc], Rezultat). myMem(X, [X|T]) :- !. % ca să fac cut doar al o apariție de mai târziu, adaug înainte de cut condiția: length(T, L), L < 5, % myMem(X, [X|_]) :- write("Here"). % detecția, pentru cazul în care am adăugat condițiile suplimentare de mai sus myMem(X, [_|T]) :- myMem(X, T). min(X, Y, M) :- X < Y, M = X. min(X, Y, M) :- X >= Y, M = Y. min2(X, Y, X) :- X < Y. min2(_, Y, Y). % Gresit min3(X, Y, X) :- X < Y, !. min3(_, Y, Y). este(lili, liliac). este(fifi, papagal). zboara(liliac). zboara(papagal). % cut pentru exceptii pasare(X) :- este(X, liliac), !, false. pasare(X) :- este(X, Ce), zboara(Ce).