home *** CD-ROM | disk | FTP | other *** search
- procedure sequence(bounds[ ])
- return Sequence(bounds)
- end
-
- class Sequence(bounds,indices)
- method max(i)
- elem := self.bounds[i]
- return (type(elem)== "integer",elem) | *elem-1
- end
- method elem(i)
- elem := self.bounds[i]
- return (type(elem)== "integer",self.indices[i]) | elem[self.indices[i]+1]
- end
- method activate()
- top := *(self.indices)
- if self.indices[1] > self$max(1) then fail
- s := ""
- every i := 1 to top do {
- s ||:= self$elem(i)
- }
- repeat {
- self.indices[top] +:= 1
- if top=1 | (self.indices[top] <= self$max(top)) then break
- self.indices[top] := 0
- top -:= 1
- }
- return s
- end
- initially
- / (self.indices) := list(*self.bounds,0)
- end
-