mm2(X, [X|_]) :- !. mm2(Y, [_|R]) :- mm2(Y, R). p3(X/Y) :- mm2(X, [1,2,3]), mm2(Y, [4,5,6]), (X+Y) mod 2 =:= 1. % 2019.a.8 p(R, S) :- member(X, R), findall(Y, (member(Y, R), Y \= X), T), !, q(X, T, S). q(X, A, [X|A]). q(X, [A|B], [A|C]) :- q(X, B, C). % p([1, 2, 3, 4], S) % 2020.a.8 filtersorted([], []). filtersorted([LNumere|CelelalteListe], [LNumere|RezultatCelelalte]) :- sort(LNumere, LNumere), !, % dacă intru pe acest caz, nu mai intru și pe următoarea regulă % numai după ce mă asigur că ESTE sortată filtersorted(CelelalteListe, RezultatCelelalte). filtersorted([_|CelelalteListe], RezultatCelelalte) :- % aici nu am verificat că lista NU este sortată filtersorted(CelelalteListe, RezultatCelelalte). filtersorted2(In, Out) :- findall(LNumere, ( member(LNumere, In), % este în In % sau sort(LNumere, LNumere) issorted(LNumere) % și este sortată ), Out). issorted([_]). issorted([H1,H2|T]) :- H1 < H2, issorted([H2|T]).