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 )