Inlämningsuppgift 1 Logikprogrammering

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.