Set::Infinite::Basic - Sets of intervals 6 =head1 SYNOPSIS |

- NAME
- DESCRIPTION
- METHODS
- empty_set
- universal_set
- until
- copy
- clone
- Mode functions:
- Logic functions:
- Set functions:
- Scalar functions:
- Overloaded Perl functions:
- Global functions:
- Internal functions:
- CAVEATS
- INTERNALS
- SEE ALSO
- AUTHOR

Set::Infinite::Basic - Sets of intervals 6 =head1 SYNOPSIS

use Set::Infinite::Basic;

$set = Set::Infinite::Basic->new(1,2); # [1..2] print $set->union(5,6); # [1..2],[5..6]

Set::Infinite::Basic is a Set Theory module for infinite sets.

It works on reals, integers, and objects.

This module does not support recurrences. Recurrences are implemented in Set::Infinite.

Creates an empty_set.

If called from an existing set, the empty set inherits the ``type'' and ``density'' characteristics.

Creates a set containing ``all'' possible elements.

If called from an existing set, the universal set inherits the ``type'' and ``density'' characteristics.

Extends a set until another:

0,5,7 -> until 2,6,10

gives

[0..2), [5..6), [7..10)

Note: this function is still experimental.

Makes a new object from the object's data.

$set = $set->real;

$set = $set->integer;

$logic = $set->intersects($b);

$logic = $set->contains($b);

$logic = $set->is_null; # also called "is_empty"

$set = $set->union($b);

$set = $set->intersection($b);

$set = $set->complement; $set = $set->complement($b); # can also be called "minus" or "difference"

$set = $set->simmetric_difference( $b );

$set = $set->span;

result is (min .. max)

$i = $set->min;

$i = $set->max;

$i = $set->size;

$i = $set->count; # number of spans

sort, <=>

separators(@i)

chooses the interval separators.

default are [ ] ( ) '..' ','.

INFINITY

returns an 'Infinity' number.

NEG_INFINITY

returns a '-Infinity' number.

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

$set->fixtype;

$set->numeric;

$set = Set::Infinite->new(10,1); Will be interpreted as [1..10]

$set = 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)

$set = Set::Infinite->new(1..3); Will be interpreted as [1..2],3 instead of [1,2,3]. You probably want ->new(1,3) instead.

The internal representation of a *span* is a hash:

{ a => start of span, b => end of span, open_begin => '0' the span starts in 'a' '1' the span starts after 'a' open_end => '0' the span ends in 'b' '1' the span ends before 'b' }

For example, this set:

[100..200),300,(400..infinity)

is represented by the array of hashes:

list => [ { a => 100, b => 200, open_begin => 0, open_end => 1 }, { a => 300, b => 300, open_begin => 0, open_end => 0 }, { a => 400, b => infinity, open_begin => 0, open_end => 1 }, ]

The *density* of a set is stored in the `tolerance`

variable:

tolerance => 0; # the set is made of real numbers.

tolerance => 1; # the set is made of integers.

The `type`

variable stores the *class* of objects that will be stored in the set.

type => 'DateTime'; # this is a set of DateTime objects

The *infinity* value is generated by Perl, when it finds a numerical overflow:

$inf = 100**100**100;

Set::Infinite

Flavio Soibelmann Glock <fglock@pucrs.br>

Set::Infinite::Basic - Sets of intervals 6 =head1 SYNOPSIS |