Exerciții Șablon parțial (2026-04-22), Subiectul II b) [5 puncte]

findSublist/3 — prima sublistă contiguă cu sumă dată

Șablon parțial (2026-04-22), Subiectul II b) [5 puncte] advanced Recursivitate pe listePredicate predefinite pe listeCut (!) și cazuri de bază

Scrieți un predicat findSublist/3 care primește o listă L, o sumă S și returnează o sublistă Sublist astfel încât Sublist este prima sublistă a listei inițiale care are suma elementelor egală cu S, unde o sublistă este definită ca o secvență consecutivă de elemente din listă. Dacă nu există nicio astfel de sublistă, se returnează false.

?- findSublist([1,2,3,4,5], 9, Sublist).
Sublist = [2, 3, 4].

?- findSublist([1,2,3,4,5], 15, Sublist).
Sublist = [1, 2, 3, 4, 5].

?- findSublist([1,2,3,4,5], 100, Sublist).
false.

Hint: folosește append/3 de două ori pentru a genera toate sublistele contigue: append(_, Rest, L), append(Sub, _, Rest). Apoi calculezi suma lui Sub și compari cu S. Un cut (!) oprește pe prima soluție găsită.

Te-ai blocat?
editor soluție
?-
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)
?
findSublist([1,2,3,4,5], 9, S). așteptat: S = [2,3,4]
?
findSublist([1,2,3,4,5], 15, S). așteptat: S = [1,2,3,4,5]
?
findSublist([1,2,3,4,5], 100, S). așteptat: false