NAME Set::Infinite - Sets of intervals SYNOPSIS use Set::Infinite; $a = Set::Infinite->new(1,2); # [1..2] print $a->union(5,6); # [1..2],[5..6] DESCRIPTION Set::Infinite is a Set Theory module for infinite sets. It works on reals or integers. You can provide your own objects or let it make them for you using the `type'. It works very well on dates, providing schedule checks (intersections), unions, and infinite recurrences. METHODS is_too_complex Sometimes a set might be too complex to print. It will happen when you ask for a quantization on a set bounded by -inf or inf. copy Makes a new object from the object's data. Mode functions: $a->real; $a->integer; Logic functions: $logic = $a->intersects($b); $logic = $a->contains($b); $logic = $a->is_null; Set functions: $i = $a->union($b); $i = $a->intersection($b); $i = $a->complement; $i = $a->complement($b); $i = $a->span; result is INTERVAL, (min .. max) Scalar functions: $i = $a->min; $i = $a->max; $i = $a->size; Overloaded Perl functions: print sort, <=> Global functions: separators(@i) chooses the interval separators. default are [ ] ( ) '..' ','. infinite($i) chooses 'infinite' name. default is 'inf' inf returns an 'Infinity' number. minus_inf returns '-Infinity' number. quantize( parameters ) Makes equal-sized subsets. In array context: returns a tied reference to the subset list. In set context: returns an ordered set of equal-sized subsets. The quantization function is external to this module: Parameters may vary depending on implementation. Positions for which a subset does not exist may show as undef. Example: $a = Set::Infinite->new([1,3]); print join (" ", $a->quantize( quant => 1 ) ); Gives: [1..2) [2..3) [3..4) select( parameters ) Selects set members based on their ordered positions (Selection is more useful after quantization). freq - default=1 by - default=[0] count - default=Infinity 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # [0..15] quantized by "1" 0 5 10 15 # freq => 5 1 3 6 8 11 13 # freq => 5, by => [ -2, 1 ] 1 3 6 8 # freq => 5, by => [ -2, 1 ], count => 2 1 14 # by => [ -2, 1 ] offset ( parameters ) Offsets the subsets. Parameters: value - default=[0,0] mode - default='offset'. Possible values are: 'offset', 'begin', 'end'. unit - type of value. Can be 'days', 'weeks', 'hours', 'minutes', 'seconds'. iterate ( sub { } ) Iterates over a subroutine. Returns the union of partial results. first In scalar context returns the first interval of a set. In list context returns the first interval of a set, and the 'tail'. Works in unbounded sets type($i) chooses an object data type. default is none (a normal perl SCALAR). examples: type('Math::BigFloat'); type('Math::BigInt'); type('Set::Infinite::Date'); See notes on Set::Infinite::Date below. tolerance(0) defaults to real sets (default) tolerance(1) defaults to integer sets real defaults to real sets (default) integer defaults to integer sets Internal functions: $a->cleanup; $a->backtrack($b); $a->fixtype; $a->numeric; Notes on Dates See module Date::Set for up-to-date information on date-sets. Set::Infinite::Date is a Date "plug-in" for sets. usage: type('Set::Infinite::Date'); # allows values like '2001-05-02 10:00:00' Set::Infinite::Date requires Time::Local. use Set::Infinite; Set::Infinite->type('Set::Infinite::Date'); Set::Infinite::Date->date_format("year-month-day"); $a = Set::Infinite->new('2001-05-02', '2001-05-13'); print "Weeks in $a: ", $a->quantize(unit => 'weeks', quant => 1); $a = Set::Infinite->new('09:30', '10:35'); print "Quarters of hour in $a: ", $a->quantize(unit => 'minutes', quant => 15); Quantize units can be years, months, days, weeks, hours, minutes, or seconds. To quantize the year to first-week-of-year until last-week-of-year, use 'weekyears': ->quantize( unit => weekyears, wkst => 1 ) 'wkst' parameter is '1' for monday (default), '7' for sunday. max and min functions will also show in date/time format. CAVEATS $a = Set::Infinite->new(10,1); Will be interpreted as [1..10] $a = Set::Infinite->new(1,2,3,4); Will be interpreted as [1..2],[3..4] instead of [1,2,3,4]. You probably want ->new([1],[2],[3],[4]) instead, or maybe ->new(1,4) $a = Set::Infinite->new(1..3); Will be interpreted as [1..2],3 instead of [1,2,3]. You probably want ->new(1,3) instead. SEE ALSO Date::Set the Reefknot project AUTHOR Flavio Soibelmann Glock