blob: 87bc2b722f23b093a67d72d8adbe3f4fa0a38b0a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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
|