oddIndexes/2 — elementele de pe poziții impare
Scrieți un predicat oddIndexes/2 care să extragă toate elementele de pe pozițiile impare dintr-o listă, fără a utiliza recursia.
?- oddIndexes([a, b, c, d, e], LR).
LR = [b, d]
Hint: combină
length/2,numlist/3,zip/3șifindall/3. Pasul cheie — zipuiești lista cu[0, 1, 2, ...]și apoi filtrezi perechile(X, Y)cuY mod 2 =:= 1.
Te-ai blocat?
editor
soluție
zip([], _, []) :- !.
zip(_, [], []) :- !.
zip([H1 | T1], [H2 | T2], [(H1, H2) | TR]) :-
zip(T1, T2, TR).
oddIndexes(List, Result) :-
length(List, Length),
numlist(0, Length, Range),
zip(List, Range, ZippedList),
findall(X, (member((X, Y), ZippedList), Y mod 2 =:= 1), Result).
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (2 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
oddIndexes([a, b, c, d, e], LR).
așteptat: LR = [b,d]
?
oddIndexes([10, 20, 30], LR).
așteptat: LR = [20]