MutableSet - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


MutableSet

An object-based mutable set

 

Description

Examples

Compatibility

Description

• 

The MutableSet appliable object provides an efficient means to construct, manipulate, and query set objects.

• 

Unlike a standard Maple set, adding an element to a MutableSet object does not allocate a new container.  As such, it can be efficiently used in loops to build up a set an element at a time.

Construction

• 

The MutableSet function returns a new MutableSet object.

– 

If called with a single argument that is either a Maple set or a MutableSet object, the returned object contains the elements in the argument.

– 

Otherwise, the returned object contains each distinct argument as an element.

Modification

• 

The following functions modify the content The ms argument denotes a MutableSet object.

– 

clear(ms) : Clear ms.

– 

delete(ms,expr) : Delete expr from ms.

– 

insert(ms,expr) : Insert expr into ms.

– 

ms ,= expr : Insert expr into ms. Unlike the insert function, the ,= operator can accept a sequence of elements on the right hand side.

Set Operation

• 

The following set functions combine MutableSet objects. Those prefixed with an ampersand (&) operate inplace on the first argument. These functions can be invoked as functions or inline operators. The ms1 and ms2 arguments denote MutableSet objects.

– 

ms1 intersect ms2, or ms1ms2, or `intersect`(ms1,ms2,...) : Return a new MutableSet object that is the intersection of the given MutableSets.

– 

ms1 &intersect ms2 or `&intersect`(ms1,ms2,...) : Remove elements of ms1 that are not elements of ms2, etc., updating ms1.

– 

ms1 minus ms2, or ms1ms2, or `minus`(ms1,ms2) : Return a new MutableSet object that contains the set difference of ms1 and ms2.

– 

ms1 &minus ms2 or `&minus`(ms1,ms2) : Remove elements of ms2 from ms1, updating ms1.

– 

ms1 union ms2, or ms1ms2, or `union`(ms1,ms2,...) : Return a new MutableSet object that is the union of the given mutable sets.

– 

ms1 &union ms2 or `&union`(ms1,ms2,...) : Combine the members of ms2, etc., with ms1, updating ms1.

Inspection

• 

The following functions inspect the content of a MutableSet object. The ms, ms1, and ms2 arguments denote MutableSet objects.

– 

ms = other or `=`(ms,other) : When evaluated in a boolean context, returns true if ms and other are both MutableSet objects with identical content, false otherwise.

– 

expr in ms  or `in`(expr,ms) : Returns true if expr is a member of ms, false otherwise.

– 

empty(ms) : Returns true if ms is empty, false otherwise.

– 

entries(ms) : Returns an expression sequence of all the entries in ms, with each entry enclosed in a list by default.

– 

has(ms,expr) : Returns true if any member of ms contains expr, false otherwise.

– 

hastype(ms,typ) : Returns true if any member of ms contains an expression of the specified type, false otherwise.

– 

indets(ms,typ) : Returns a Maple set of all indeterminates in ms. If the optional typ parameter is specified, then returns the expressions of type typ.

– 

indices(ms) : Returns an expression sequence of all the indices of ms, with each index enclosed in a list by default.

– 

lowerbound(ms) : Returns the lower index bound (always 1).

– 

max(ms) : Returns the maximum element of ms. Behaves like max on sets.

– 

member(expr,ms) : Returns true if  expr is a member of ms, false otherwise.  The three argument form of member is not supported.

– 

min(ms) : Returns the minimum element of ms.  Behaves like min on sets.

– 

numelems(ms) : Returns the number of elements in ms.

– 

numboccur(ms,expr) : Count the number of occurrences of expr in ms, either as an element or within elements.

– 

`subset`(ms1,ms2), or ms1 subset ms2, or ms1 subset ms2 : Returns true if ms1 is a subset of ms2, false otherwise.

– 

upperbound(ms) : Returns the upper index (same as the output of numelems).

• 

Each of the above functions is already available in Maple for built-in Maple structures such as sets and Arrays. Please refer to the help page for each function for details on usage.

Mapping, Selection, Removal, and Substitution

• 

The map, select, remove, selectremove, and subs functions operate on a MutableSet object. Refer to their help pages for the calling sequences. By default they create a new MutableSet object, but if called with the inplace index option, they update the MutableSet object. The ms argument denotes a MutableSet object.

– 

map(fcn,ms) : Apply a procedure, fcn, to each element of ms.

– 

select(fcn,ms) : Select elements of ms for which fcn returns true.

– 

remove(fcn,ms) : Remove elements of ms for which fcn returns true.

– 

selectremove(fcn,dq) : Produce two MutableSets, one containing selected elements and the other removed elements.

– 

subs(eqns,ms) : Substitute subexpressions in the content of ms.

Conversion

• 

The convert function can be used to convert a MutableSet object to and from other Maple structures.

– 

convert(ms,typ) : Convert a MutableSet to the specified type

– 

convert(expr,MutableSet) : Convert expr to a MutableSet object. expr must be a list, set, or rtable.

Indexing

• 

Integer indices can be used to extract or reassign a single element of a MutableSet. Reassigning an element may change its index.

• 

Range indices are not supported.

Iteration

• 

The MutableSet object exports a ModuleIterator function, allowing a MutableSet object to be used in loops and iterations (seq, add, etc.).

Examples

Construction

• 

Create a MutableSet with three elements.

M1MutableSeta,b,c

M1MutableSeta,b,c

(1)
• 

Copy M1.

M2MutableSetM1

M2MutableSeta,b,c

(2)
• 

Create a MutableSet from a Maple set.

M3MutableSetb,c,d

M3MutableSetb,c,d

(3)

Modification

• 

Delete the b element from M1 and insert a d element.

deleteM1,b

MutableSeta,c

(4)

insertM1,d

MutableSeta,c,d

(5)
• 

Add c to each element in M2, doing so inplace.

mapinplace`+`,M2,c

MutableSeta+c,b+c,2c

(6)
• 

Replace all occurrences of c inside M2 with d, doing so inplace.

subsinplacec=d,M2

MutableSet2d,a+d,b+d

(7)

Operation

• 

Create two MutableSet objects, then form their intersection.

M1MutableSeta,b,c,d

M1MutableSeta,b,c,d

(8)

M2MutableSetc,d,e,f

M2MutableSetc,d,e,f

(9)

M3M1intersectM2

M3MutableSetc,d

(10)
• 

Use the inplace form to update M1 with the intersection of M1 and M2.

M1&intersectM2:

M1

MutableSetc,d

(11)

Inspection

• 

Use member to determine whether a given element is a member of M1.

M1MutableSeta,b,c,4

M1MutableSet4,a,b,c

(12)

memberb,M1

true

(13)
• 

Use has to test for the occurrence of a subexpression in any of the members of the set.

hasM1,c

true

(14)

indetsM1,numeric

4

(15)

Conversion

• 

Create a MutableSet object by converting a Vector.

M1convertVector10,symbol=v,MutableSet

M1MutableSetv1,v2,v3,v4,v5,v6,v7,v8,v9,v10

(16)
• 

Convert M1 to a standard set.

convertM1,set

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10

(17)

Indexing

• 

Use indexing to extract each element of a MutableSet.

M1MutableSeta,b,c,d

M1MutableSeta,b,c,d

(18)

seqi=M1i,i=1..numelemsM1

1=a,2=b,3=c,4=d

(19)
• 

Reassign the value at the second index. Note that in the updated MutableSet, the new value is assigned a different index.

M1223:

seqi=M1i,i=1..numelemsM1

1=23,2=a,3=c,4=d

(20)

Iteration

• 

Iterate through each element in M1.

seqx,xinM1

23,a,c,d

(21)
• 

Add the elements of M2.

addx,xinM2

c+d+e+f

(22)

forxinM2doprintxenddo

c

d

e

f

(23)

Usage

• 

The MutableSet object provides an efficient way to construct a set an element at a time, in a loop.  Doing so with standard Maple sets is inefficient in that each addition creates a new set. As such the operation is On2 in time and memory, where n is the number of elements. The following compares the memory and time required to create a set of ten thousand elements using standard sets and a MutableSet object.

MapleSets := proc(n :: posint)
 local i, s;
    s := {};
    for i to n do
        s := s union {i};
    end do:
    numelems(s);
end proc:
MutableSets := proc(n :: posint)
local i, s;
    s := MutableSet();
    for i to n do
        insert(s,-i);
    end do;
    numelems(s);
end proc:

CodeTools:-UsageMapleSets10000

memory used=382.91MiB, alloc change=25.48MiB, cpu time=1.50s, real time=1.21s, gc time=595.66ms

10000

(24)

CodeTools:-UsageMutableSets10000

memory used=1.38MiB, alloc change=0 bytes, cpu time=30.00ms, real time=30.00ms, gc time=0ns

10000

(25)

Compatibility

• 

The MutableSet object was introduced in Maple 2016.

• 

For more information on Maple 2016 changes, see Updates in Maple 2016.

See Also

Object

set