Standardprädikate zur Mengenbearbeitung

Aus Informatik
Wechseln zu: Navigation, Suche

Eine Liste repräsentiert dann eine Menge (engl.: Set) im mathematischen Sinn, wenn sie keine doppelten Elemente enthält. Die Elemente in einer Menge müssen nicht sortiert sein.

Standardprädikate sind geschützte Bezeichner innerhalb von Prolog und dürfen deshalb nicht redefiniert werden.

is_set(Set)
... ist erfüllt, wenn Set keine Duplikate enthält.
?- is_set([1,2,3,5,3,8]).
No

?- is_set([1,2,3,5,6,8]).
Yes

?- is_set([1,2,[2],5]).
Yes
list_to_set(List,Set)
... eliminiert alle Duplikate in List und liefert die Menge (!) Set.
?- list_to_set([5,2,5,3,5,4,3], Set).
Set = [5, 2, 3, 4] ;
intersection(Set1,Set2,Set3)
... ist erfüllt, wenn Set3 die Schnittmenge aus Set1 und Set2 ist.
?- intersection([1,5,4,3,9,2],[7,6,5,4,3,2,8], Set3).
Set3 = [5, 4, 3, 2] ;
subtract(Set,Delete,Result)
... entfernt alle Elemente der Menge Delete aus der Menge Set und liefert Result.
?- subtract([4,1,2,6,8],[6,1],Result).
Result = [4, 2, 8] ;

?- subtract([9,5,4,3,2,1],[8,7,6,5,4,3,2], Result).
Result = [9, 1] ;
union(Set1,Set2,Set3)
... ist erfüllt, wenn Set3 die Vereinigungsmenge aus den Mengen Set1 und Set2 ist.
?- union([a,c,e,f],[c,m,a,d,e],Set3).
Set3 = [f, c, m, a, d, e] ;
subset(Subset,Set)
... ist erfüllt, wenn Subset Teilmenge der Menge Set ist.
?- subset([1,2,3,4,5,6],[2,3]).
No

?- subset([2,3],[1,2,3,4,5,6]).
Yes

?- subset([3,1,2],[2,1,3]).
Yes