Aggregate

aggcat.spad line 1 [edit on github]

The notion of aggregate serves to model any data structure aggregate, designating any collection of objects, with heterogeneous or homogeneous members, with a finite or infinite number of members, explicitly or implicitly represented. An aggregate can in principle represent everything from a string of characters to abstract sets such as “the set of x satisfying relation r(x)“. An attribute finiteAggregate is used to assert that a domain has a finite number of elements.

#: % -> NonNegativeInteger if % has finiteAggregate

\#(u) returns the number of elements in u.

copy: % -> %

copy(u) returns a top-level (non-recursive) copy of u. Note: for collections, copy(u) = [x for x in u].

empty?: % -> Boolean

empty?(u) tests if u has 0 elements.

empty: () -> %

empty()$D creates an aggregate of type D with 0 elements. Note: The $D can be dropped if understood by context, e.g. u: D := empty().

eq?: (%, %) -> Boolean

eq?(u, v) tests if u and v are same objects.

less?: (%, NonNegativeInteger) -> Boolean

less?(u, n) tests if u has less than n elements.

more?: (%, NonNegativeInteger) -> Boolean

more?(u, n) tests if u has more than n elements.

sample: %

sample yields a value of type %

size?: (%, NonNegativeInteger) -> Boolean

size?(u, n) tests if u has exactly n elements.