splitListEvenOdd/3 — separă pare și impare
Scrieți un predicat splitListEvenOdd/3 care primește ca prim argument o listă și returnează în al doilea argument sublista elementelor pare, respectiv în al treilea argument sublista elementelor impare.
?- splitListEvenOdd([4, 2, 10, 2, 5, 7, 13, 8, 19, 27, 32, 40, 16], EvenList, OddList).
EvenList = [4, 2, 10, 2, 8, 32, 40, 16],
OddList = [5, 7, 13, 19, 27]
Hint: recursivitate pe
[H | T]cu două clauze pentru cazul recursiv — una cândH mod 2 =:= 0, una altfel. Cazul de bază:splitListEvenOdd([], [], []).
Te-ai blocat?
editor
soluție
splitListEvenOdd([], [], []) :- !.
splitListEvenOdd([H | T], [H | TE], TO) :-
H mod 2 =:= 0, !,
splitListEvenOdd(T, TE, TO).
splitListEvenOdd([H | T], TE, [H | TO]) :-
splitListEvenOdd(T, TE, TO).
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
splitListEvenOdd([4,2,10,2,5,7,13,8,19,27,32,40,16], E, O).
așteptat: E = [4,2,10,2,8,32,40,16], O = [5,7,13,19,27]
?
splitListEvenOdd([], E, O).
așteptat: E = [], O = []
?
splitListEvenOdd([1,3,5], E, O).
așteptat: E = [], O = [1,3,5]