Er uppgift är att konstruera ett mängdhanteringspaket, dvs att skriva ett antal predikat som skall operera på mängder. Du skall låta mängderna representeras av listor. De predikat som behövs är följande:
union(A,B,C) - C är unionen av A och B.
Exempel:
?-
union([a,b,c], [b,c,d,e], C).
C = [a,b,c,d,e]
Obs! Inga dubletter i
resultatet. Du får anta att de två första listorna ej
innehåller dubletter.
snitt(A,B,C) - C är snittet mellan A och B.
Exempel:
?-
snitt([a,b,c], [c,d,e,b], C).
C = [b,c]
differens(A,B,C) - C är mängden av alla element i A som inte finns i
B.
Exempel:
?- differens([b,a,c], [b,d,c,e], C).
C = [a]
delmängd(A,B) - A är en delmängd av B.
Exempel:
?-
delmängd([b,c], [c,d,b,e]).
yes
lika(A,B) - mängden A är lika med mängden B.
Exempel:
?-
lika([a,b,c], [c,a,b]).
yes
cartesisk_produkt(A,B,C) - C är mängden av alla möjliga par som
kan bildas av elementen i A och B.
Exempel:
?- cartesisk_produkt([a,b,c], [1,2], C).
C = [(a,1), (a,2), (b,1), (b,2), (c,1),
(c,2)]
Ledtråd: för varje element i första listan används predikatet bilda_par(X,M,P) som skapar en lista med par på följande sätt: bilda_par(a, [1,2], P) vilket ger P = [(a,1), (a,2)], och därefter slås de skapade listorna ihop.