Acme-Partitioner
view release on metacpan or search on metacpan
lib/Acme/Partitioner.pm view on Meta::CPAN
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw(
);
our $VERSION = '0.01';
sub using {
my ($class, @list) = @_;
bless {
by_string => { map { $_ => 0 } @list },
sublists => [\@list],
}, $class;
}
sub once_by {
my ($self, $sub) = @_;
Acme::Partitioner::Actor::_new(undef, "once", $sub, $self);
}
sub partition_of {
lib/Acme/Partitioner.pm view on Meta::CPAN
@{ $self->{sublists}[$partition] }
}
sub size {
my ($self) = @_;
scalar @{ $self->{sublists} }
}
sub all_partitions {
my ($self) = @_;
map { [@$_] } @{ $self->{sublists} }
}
package Acme::Partitioner::Actor;
use 5.012000;
use strict;
use warnings;
sub _new {
my ($old, $type, $sub, $partitioner) = @_;
$partitioner //= $old->{partitioner};
lib/Acme/Partitioner.pm view on Meta::CPAN
Acme::Partitioner - Iterated partition refinement.
=head1 SYNOPSIS
use Acme::Partitioner;
my $p = Acme::Partitioner->using(@states);
my $partitioner =
$p->once_by(sub { $dfa->is_accepting($_) })
->then_by(sub {
join " ", map { $p->partition_of($_) }
$dfa->transitions_from($_)
});
while ($partitioning->refine) {
say "Still partitioning, got "
. $p->size . " partitions so far";
}
=head1 DESCRIPTION
( run in 0.753 second using v1.01-cache-2.11-cpan-49f99fa48dc )