Matteo d'Addio <matteo.daddio@live.it>
A double linked ring data structure. A ring has no beginning or end, it only has a current element.
procedure
( ring->list a-ring)→list?
a-ring:ring?
'(a b c d)
procedure
( ring-size a-ring)→exact-nonnegative-integer?
a-ring:ring?
procedure
( ring-current a-ring)→any/c
a-ring:ring?
0
ring-current: the ring is empty
4
'a
procedure
( ring-next! a-ring)→any/c
a-ring:ring?
procedure
( ring-prev! a-ring)→any/c
a-ring:ring?
'a
'b
'b
'(b c d a)
'a
'd
'd
'(d a b c)
procedure
( ring-remove-current! a-ring)→void?
a-ring:ring?
procedure
( ring-set-current! a-ringelem)→void?
a-ring:ring?elem:any/c
'(A b c d)
'(b c d)
procedure
( ring-add-next! a-ringelem)→void?
a-ring:ring?elem:any/c
procedure
( ring-add-prev! a-ringelem)→void?
a-ring:ring?elem:any/c
'(3 2 1 a b c d)
'(3 b c d a 1 2)
The procedure ring->list can be quite confusing. I use it mainly for debugging purposes.