Union( D1, D2... )
Union( list )
In the first form Union returns the union of the domains D1,
D2, etc. In the second form list must be a list of
domains and Union returns the union of those domains. Each
argument D or element of list respectively may also be
an arbitrary list, in which case Union silently applies Set
(see Set) to it first.
The result of Union is the set of elements that lie in any the
domains D1, D2, etc. Functions called by the dispatcher
function Union however, are encouraged to keep as much structure
as possible. However, currently GAP does not support any
category that is closed under taking unions except the category of all
domains. So the only case that structure will be kept is when one argument
D or element of list respectively is a superset of all
the other arguments or elements of list.
gap> Union( GaussianIntegers, Rationals );
Error, sorry, cannot unite <E> with the infinite domain <D>
gap> Union( D12, Group( (1,2), (1,2,3) ) );
[ (), (2,3), (2,6)(3,5), (1,2), (1,2)(3,6)(4,5), (1,2,3),
(1,2,3,4,5,6), (1,3,2), (1,3), (1,3)(4,6), (1,3,5)(2,4,6),
(1,4)(2,3)(5,6), (1,4)(2,5)(3,6), (1,5)(2,4), (1,5,3)(2,6,4),
(1,6,5,4,3,2), (1,6)(2,5)(3,4) ]
gap> Union( [2,4,6,8,10], [3,6,9,12,15], [5,10,15,20,25] );
[ 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 20, 25 ]
# two or more domains or sets as arguments are legal
gap> Union( [ [1,2,4], [2,3,4], [1,3,4] ] );
[ 1, 2, 3, 4 ] # or a list of domains or sets
gap> Union( [ ] );
[ ]
The dispatcher function (see Dispatchers) Union is slightly
different from other dispatcher functions. It does not simply call the
function in the operations record passings its arguments. Instead it loops
over its arguments (or the list of domains or sets) and calls the function in
the operations record repeatedly, and passes each time only two domains. This
obviously makes writing the function for the operations record simpler.
The default function DomainOps.Union checks whether either
domain is infinite. If one is it signals an error. If both domains are finite
it computes the proper sets of elements of both and unites them (see
Elements and Set Functions for Sets). This default method is overlaid by more
special functions for some other domains. Those functions usually are faster.