lista([1,2,3,4,5,6,7,8,9]). evens(L, LE) :- findall(E, (member(E, L), E mod 2 =:= 0), LE). % LE = [E | E <- L, E `mod` 2 == 0] pairs(L1, L2, P) :- findall((E1, E2), ( member(E1, L1), member(E2, L2), E1 < E2), P). %, write(E1). % bagof separă rezultatele după legările găsite pentru X, care nu este legată și nu apare în Template. % lista(L), bagof(E,(member(E, L),member(X, L), E < X), R). % nu vreau să îmi separe după legările lui X % lista(L), bagof(E,X^(member(E, L),member(X, L), E < X), R). % la fel ca bagof, dar sortează și elimină duplicatele % lista(L), setof(E,X^(member(E, L),member(X, L), E < X), R). nonMax(L, R) :- setof(E,X^(member(E, L),member(X, L), E < X), R). allEvens(L) :- forall(member(E, L), 0 =:= E mod 2). % lista(L), length(L, LL), format("lista ~w are ~w elemente.~n~n", [L, % LL]). % ! "cut" mem(E, [E|_]) :- !. mem(E, [_|T]) :- mem(E, T). min(X, Y, M) :- X < Y, M = X. min(X, Y, M) :- X >= Y, M = Y. min2(X, Y, M) :- X < Y, !, M = X. min2(_, Y, M) :- M = Y. % cut este pus prea devreme min3(X, Y, M) :- !, X < Y, M = X. min3(_, Y, M) :- M = Y. este(lili, liliac). este(fifi, papagal). zboara(liliac). zboara(papagal). % forțez negația pentur o excepție de la regula generală pasare(X, pasare) :- este(X, liliac), !, false. pasare(X, pasare) :- este(X, Y), zboara(Y). % compuși distanta(pos(X1, Y1), pos(X2, Y2), D) :- D is abs(X1 - X2) + abs(Y1 - Y2).