Iloczyny kartezjańskie i relacje są zbiorami składającymi się z par uporządkowanych, stąd w Prologu są reprezentowane w postaci listy', na przykład:
Zbiór Lista
{(o,l), (o, 2)} [(a, 1) , (a,2)]
{(a,M), (o,6,2)} [(a,b,l), (a,b,2)]
Do generowania zbiorów wykorzystuje się predykat findall.
Definicja Zapytanie
L={x:P(x)} findall(X, P(x), L)
L — {(x,j/) : R(x,y)} f indall((X,Y) , R(x,y), L)
Predykat ten zwraca listę L, która zawiera wszystkie wartości zmiennej X lub pary zmiennych (X,Y) spełniające funkcję zdaniową P(x) lub R(x,y).
Uwaga 4.1 Funkcje zdaniowe złojone muszą byc zapisane w nawiasie.
1. Znaleźć wszystkie elementy zbioru A = {2,3,1, 7,8}, które są większe od 2:
?- A = [2,3,1,7,8], findall (X, (member(X, A) , X>2) , L) .
L = [3, 7, 8]
2. Dany jest zbiór A = {2,3,1,7,8}. Znaleźć wszystkie elementy x takie, że:
(a) xe4
(b) x > 4 (wsk. >=)
(c) 1 < x < 7 (wsk. =<)
(d) x2 < 9
3. Znaleźć A x B dla A = {a, 6} i B = {1,2,3}:
?- A = [a,b], B = [1,2,3], findall((X,Y), (member(X,A) , member(Y,B)) , L) .
L = [(a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3)]
4. Znaleźć A x B i B x A dla:
(a) A = {a},B = {b}
(b) A = {a}, B = {1,2,3}
(c) A = {a,b},B = <H
(d) 4 = {a,6},B={0}
5. Znaleźć A2 dla A — {a, b}.
6. Znaleźć A x B x C dla A = {x,y, z}, B = {1,2}, C = {u}.
7. Dane są zbiory A = {1,2}, B = {1,2,4}. Niech x € A \y € B. Znaleźć iloczyn kartezjański A x B i relacje B. w nim określone:
(a) AxB = {(x,y)}
(b) B = {(x,i/) : x < j/}
(c) B = {(x,j/) : x > j/ + 1}
(d) R. = {(x, 2/) : x = y}
(e) R= {(x,2/) :x>2/}
(f) R = {(x,2/) : y = x2} (wsk. Y is X*X)