divisorsPairs/3 — toate perechile divizor
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/3pentru a obține intervalul, apoifindall/3cu un goal compus dinmember/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
divisorsPairs(A, B, Result) :-
numlist(A, B, Range),
findall((X, Y), (member(X, Range), member(Y, Range), X mod Y =:= 0), 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)
?
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)]