Set::Infinite::_recurrence - Extends Set::Infinite with recurrence functions

# NAME

Set::Infinite::_recurrence - Extends Set::Infinite with recurrence functions

# SYNOPSIS

`    \$recurrence = \$base_set->_recurrence ( \&next, \&previous );`

# DESCRIPTION

This is an internal class used by the DateTime::Set module. The API is subject to change.

It provides all functionality provided by Set::Infinite, plus the ability to define recurrences with arbitrary objects, such as dates.

# METHODS

• _recurrence ( \&next, \&previous )
Creates a recurrence set. The set is defined inside a 'base set'.
`   \$recurrence = \$base_set->_recurrence ( \&next, \&previous );`

The recurrence functions take one argument, and return the 'next' or the 'previous' occurence.

Example: defines the set of all 'integer numbers':

`    use strict;`
```    use Set::Infinite::_recurrence;
use POSIX qw(floor);```
```    # define the recurrence span
my \$forever = Set::Infinite::_recurrence->new(
Set::Infinite::_recurrence::NEG_INFINITY,
Set::Infinite::_recurrence::INFINITY
);```
```    my \$recurrence = \$forever->_recurrence(
sub {   # next
floor( \$_ + 1 )
},
sub {   # previous
my \$tmp = floor( \$_ );
\$tmp < \$_ ? \$tmp : \$_ - 1
},
);```
```    print "sample recurrence ",
\$recurrence->intersection( -5, 5 ), "\n";
# sample recurrence -5,-4,-3,-2,-1,0,1,2,3,4,5```
```    {
my \$x = 234.567;
print "next occurence after \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 235
print "previous occurence before \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 234
}```
```    {
my \$x = 234;
print "next occurence after \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 235
print "previous occurence before \$x = ",
\$recurrence->{param}->( \$x ), "\n";  # 233
}```

• is_forever
Returns true if the set is a single span, ranging from -Infinity to Infinity.

• _is_recurrence
Returns true if the set is an unbounded recurrence, ranging from -Infinity to Infinity.

# SUPPORT

Support is offered through the `datetime@perl.org` mailing list.

# AUTHOR

Flavio Soibelmann Glock <fglock@pucrs.br>

The recurrence generation algorithm is based on an idea from Dave Rolsky.

Copyright (c) 2003 Flavio Soibelmann Glock. All rights reserved. This program is free software; you can distribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.