Exerciții Laboratorul 5, Exercițiul 1

divisorsPairs/3 — toate perechile divizor

Laboratorul 5, Exercițiul 1 medium findall / bagof / setof (generate-and-test)

Scrieți un predicat divisorsPairs/3 care determină toate perechile (X, Y), astfel încât X și Y sunt elemente ale listei determinată de primele două argumente ale predicatului, iar al treilea argument este lista perechilor cerute.

?- divisorsPairs(2, 6, LR).
LR = [(2,2), (3,3), (4,2), (4,4), (5,5), (6,2), (6,3), (6,6)]

Hint din breviar: folosește numlist/3 pentru a obține intervalul, apoi findall/3 cu un goal compus din member/2 (de două ori) și condiția aritmetică X mod Y =:= 0.

Reamintim:

?- numlist(-2, 3, R).
R = [-2, -1, 0, 1, 2, 3]

findall(X, P, R) găsește toți acei X care respectă proprietatea P și îi returnează în lista R.

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 (2 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
divisorsPairs(2, 6, LR). așteptat: LR = [(2,2),(3,3),(4,2),(4,4),(5,5),(6,2),(6,3),(6,6)]
?
divisorsPairs(1, 3, LR). așteptat: LR = [(1,1),(2,1),(2,2),(3,1),(3,3)]