%verific(Pos) :- Pos = (X, Y), X > Y. verific(Limita, (X, Y)) :- X < Limita, Y < Limita. p(X) :- X > 2, X < 8. lista([1,2,3,4,5,6,7,8,9,10]). filterP(Rezultat) :- lista(Lista), findall(X, ( member(X, Lista), p(X) ), Rezultat). % lista(Lista), member(X, Lista), p(X) filterPCart(Lista2, Rezultat) :- lista(Lista), bagof(X, ( member(X, Lista), p(X), member(Y, Lista2), X < Y ), Rezultat). verificaListaP(Lista) :- forall(member(X, Lista), p(X)). % ! "cut" mem(E, [E | _]) :- !. mem(E, [_ | T]) :- mem(E, T). min(X, Y, Min) :- X < Y, Min = X. min(X, Y, Min) :- X >= Y, Min = Y. min2(X, Y, Min) :- X < Y, Min = X. min2(_, Y, Min) :- Min = Y. min3(X, Y, Min) :- X < Y, !, Min = X. min3(_, Y, Min) :- Min = Y. min4(X, Y, Min) :- !, X < Y, Min = X. min4(_, Y, Min) :- Min = Y. binsearch(E, L) :- binsearch(E, L, L). binsearch(E, [E | _], Path) :- !, format("found in ~w~n", [Path]). binsearch(E, L, Path) :- L = [_, _ | _], format('searching ~w in ~w~n', [E, L]), length(L, LL), Half is LL // 2, append(Half1, Half2, L), length(Half1, Half), ( binsearch(E, Half1, [Half1 | Path]), ! ; binsearch(E, Half2, [Half2 | Path]) ). binsearch(_, _, Path) :- format("not found in ~w~n", [Path]), false.