Iterator-Misc
view release on metacpan or search on metacpan
=for gpg
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
=head1 NAME
Iterator::Misc - Miscellaneous iterator functions.
=head1 VERSION
This documentation describes version 0.03 of Iterator::Misc, August 26, 2005.
=cut
use strict;
use warnings;
package Iterator::Misc;
our $VERSION = '0.03';
use base 'Exporter';
use vars qw/@EXPORT @EXPORT_OK %EXPORT_TAGS/;
@EXPORT = qw(ipermute igeometric inth irand_nth ifibonacci);
@EXPORT_OK = @EXPORT;
use Iterator;
# Function name: ipermute
# Synopsis: $iter = ipermute (@items);
# Description: Generates permutations of a list.
# Created: 07/29/2005 by EJR
# Parameters: @items - the items to be permuted.
# Returns: Sequence iterator
# Exceptions: Iterator::X::Am_Now_Exhausted
# Notes: Algorithm from MJD's book.
sub ipermute
{
my @items = @_;
my @digits = (0) x @items; # "Odometer". See Dominus, pp 128-135.
return Iterator->new (sub
{
unless (@digits)
{
Iterator::is_done;
}
# Use the existing state to create a new permutation
my @perm = ();
my @c_items = @items;
push @perm, splice(@c_items, $_, 1) for @digits;
# Find the rightmost column that isn't already maximum
my $column = $#digits;
until ($digits[$column] < $#digits-$column || $column < 0)
{ $column-- }
if ($column < 0)
{
# Last set. Generate no more.
@digits = ();
that is, there are no more values in the sequence to return.
As a string, this exception is "Iterator is exhausted."
=item * User Code Exceptions
Class: C<Iterator::X::User_Code_Error>
This exception is thrown when the sequence generation code throws any
sort of error besides C<Am_Now_Exhausted>. This could be because your
code explicitly threw an error (that is, C<die>d), or because it
otherwise encountered an exception (any runtime error).
This exception has one method, C<eval_error>, which returns the
original C<$@> that was trapped by the Iterator object. This may be a
string or an object, depending on how C<die> was invoked.
As a string, this exception evaluates to the stringified C<$@>.
=item * Internal Errors
Class: C<Iterator::X::Internal_Error>
Something happened that I thought couldn't possibly happen. I would
appreciate it if you could send me an email message detailing the
circumstances of the error.
=back
=head1 REQUIREMENTS
Requires the following additional modules:
L<Iterator>
=head1 SEE ALSO
I<Higher Order Perl>, Mark Jason Dominus, Morgan Kauffman 2005.
L<http://perl.plover.com/hop/>
=head1 THANKS
Much thanks to Will Coleda and Paul Lalli (and the RPI lily crowd in
general) for suggestions for the pre-release version.
=head1 AUTHOR / COPYRIGHT
Eric J. Roode, roode@cpan.org
Copyright (c) 2005 by Eric J. Roode. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
To avoid my spam filter, please include "Perl", "module", or this
module's name in the message's subject line, and/or GPG-sign your
message.
=cut
=begin gpg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (Cygwin)
iD8DBQFDD2FyY96i4h5M0egRAgDYAJ4xaco/BbTlPFjbNbtqxiqzRyyfaACfRY9Z
e4Z3srTvcJbhykfOsEuFJHA=
=V7w+
-----END PGP SIGNATURE-----
=end gpg
( run in 0.402 second using v1.01-cache-2.11-cpan-df04353d9ac )