determ(X,X) :- atomic(X), !. determ(T,Y) :- T =.. [X|Xs], (X = Y ; deterl(Xs, Y)). deterl([],_) :- !, fail. deterl([X|Xs],Y) :- determ(X,Y) ; deterl(Xs,Y). arrange(L1, L2, V, S1, S2) :- part(L1, V, S11,S12), part(L2, V, S21, S22), append(S11,S21,S1), append(S12,S22,S2). part([X|Xs], V, [X|L1], L2) :- X < V, part(Xs, V, L1, L2). part([X|Xs], V, L1, [X|L2]) :- X > V, part(Xs, V, L1, L2). part([V|Xs], V, L1, L2) :- !, part(Xs, V, L1, L2). part([], _, [], []). sumoftwo(L, V, X, Y) :- deepmember(X,L), deepmember(Y,L), V is X+Y. deepmember(X, [X|_]) :- atomic(X). deepmember(X, [Y|Ys]) :- deepmember(X,Y); deepmember(X,Ys). deeprev([],[]) :- !. deeprev([X|Xs], R) :- !, deeprev(X,V), deeprev(Xs,Vs), append(Vs, [V], R). deeprev(X,X) :- atomic(X). tripart([X|Xs],P1,P2,[X|L1],L2,L3) :- X < P1, X < P2, !, tripart(Xs, P1, P2, L1, L2, L3). tripart([X|Xs],P1,P2,L1,[X|L2],L3) :- X >= P1, X =< P2, !, tripart(Xs, P1, P2, L1, L2, L3). tripart([X|Xs],P1,P2,L1,L2,[X|L3]) :- X > P1, X > P2, !, tripart(Xs, P1, P2, L1, L2, L3). tripart([],_,_,[],[],[]). maxsum([X], [Y], R) :- !, R is X + Y. maxsum([X|Xs], [Y|Ys], T) :- maxsum(Xs,Ys,R), T is X + Y, T > R, !. maxsum([X|Xs], [Y|Ys], R) :- maxsum(Xs,Ys,R).