Details of the Iterator object - Maple Programming Help

Home : Support : Online Help : Mathematics : Discrete Mathematics : Combinatorics : Iterator : Iterator/Details

Details of the Iterator object

 Common Methods Each iterator constructed by this package is a Maple object with the following common methods. ModuleApply : makes the object an appliable object factory. It calls the Object constructor and passes its arguments to the object's ModuleCopy method. ModuleCopy(self,proto,...) : used to copy an object; see ModuleCopy. ModuleIterator(self) : returns the two procedures, hasNext and getNext used to implement an iterator; see ModuleIterator. The iterators constructed by this package violate one of the specifications: calling hasNext consecutively, without a call to getNext, does not necessarily return the same value. Each call to hasNext advances the iterator. The reason for this is efficiency; these iterators reuse an Array as output, so there is no need to call getNext. length(self) : returns the length of the output array of the iterator self. For most iterators, this is a fixed value, but for a few this changes with each iteration. anditer(p,self,...) : applies the predicate p predicate to each iteration. Returns false immediately if any iteration returns false, otherwise returns true. Optional arguments are passed to the predicate, p. oriter(p,self,...) : applies the predicate p predicate to each iteration. Returns true immediately if any iteration returns true, otherwise returns false. Optional arguments are passed to the predicate, p. output(self) : returns the Array used to store the output result.
 Standard Methods Many of the iterators have the following methods. Number(self) : return the total number of iterations that the iterator generates if it starts from rank one. Rank(self,L) : compute the rank of L.  If L is not passed, use the current rank of self. Unrank(self,rnk) : return the output of self corresponding to rank rnk.

Examples

 > $\mathrm{with}\left(\mathrm{Iterator}\right):$

Construct an iterator that generates all permutations of the integers from one to five.

 > $P≔\mathrm{Permute}\left(5\right):$

Compute the number of iterations.

 > $\mathrm{Number}\left(P\right)$
 ${120}$ (1)

Test whether the sum of the first and last elements of any permutation equals three, then display the permutation and its rank that meet the criteria.

 > $\mathrm{oriter}\left(V↦\mathrm{evalb}\left(V\left[1\right]+V\left[-1\right]=3\right),P\right)$
 ${\mathrm{true}}$ (2)
 > $\mathrm{output}\left(P\right)$
 $\left[\begin{array}{ccccc}{1}& {3}& {4}& {5}& {2}\end{array}\right]$ (3)
 > $\mathrm{Rank}\left(P\right)$
 ${10}$ (4)

Verify all permutations sum to 15.

 > $\mathrm{anditer}\left(\left(V,s\right)↦\mathrm{evalb}\left(\mathrm{add}\left(v,v=V\right)=s\right),P,15\right)$
 ${\mathrm{true}}$ (5)

Display the length of the output.

 > $\mathrm{length}\left(P\right)$
 ${5}$ (6)