NAME

Math::NumSeq -- number sequences

SYNOPSIS

# only a base class, use one of the actual classes such as
use Math::NumSeq::Squares;
my $seq = Math::NumSeq::Squares->new;
my ($i, $value) = $seq->next;

DESCRIPTION

This is a base class for number sequences. Sequence objects can iterate through values, and some sequences have random access and predicate. It's a touch rough yet.

The idea is to generate things like squares or primes in a generic way. Some sequences, like squares, are so easy there's no need for this except for the genericness. Other sequences are trickier and an iterator is a good way to go through the values.

FUNCTIONS

In the following "Foo" is one of the subclass names. The intention is that all modules Math::NumSeq::Something are sequence classes, and that supporting things are deeper, such as under Math::NumSeq::Something::Helper or Math::NumSeq::Base::SharedStuff.

$seq = Math::NumSeq::Foo->new (key=>value,...)

Create and return a new sequence object.

($i, $value) = $seq->next()

Return the next index and value in the sequence.

$seq->rewind()

Rewind the sequence to its starting point.

$i = $seq->i_start()

Return the first index $i in the sequence. This is the position rewind() returns to.

$str = $seq->description()

A human-readable description of the sequence.

$value = $seq->values_min()
$value = $seq->values_max()

Return the minimum or maximum value taken by values in the sequence, or undef if unknown or infinity.

$ret = $seq->characteristic($key)

Return something if the sequence has a $key (a string) characteristic, or undef if not. This is intended as a loose set of features or properties a sequence might have.

digits            integer or undef, the radix if seq is digits
count             boolean, true if values are counts of something
smaller           boolean, true if v[i] < i, in general
integer           boolean, true if all values are integers

increasing        boolean, true if v[i+1] > v[i] always
non_decreasing    boolean, true if v[i+1] >= v[i] always
increasing_from_i     integer, i for which v[i+1] > v[i]
non_decreasing_from_i integer, i for which v[i+1] >= v[i]
$str = $seq->oeis_anum()

Return the A-number (a string) for Sloane's Online Encyclopedia of Integer Sequences of $seq, or return undef if not in the OEIS or not known. For example

my $seq = Math::NumSeq::Squares->new;
my $anum = $seq->oeis_anum;
# gives $anum eq "A000290"

The web page for that is then

http://oeis.org/A000290

Sometimes the OEIS has duplicates, ie. two A-numbers which are the same sequence. $seq->oeis_anum() is generally the primary one in cases where the duplication is accidental or historical.

$aref = Math::NumSeq::Foo->parameter_info_array()
@list = Math::NumSeq::Foo->parameter_info_list()

Return an arrayref of list describing the parameters taken by a given class. This meant to help making widgets etc for user interaction in a GUI. Each element is a hashref

{
  name        =>    parameter key arg for new()
  description =>    human readable string
  type        =>    string "integer","boolean","enum" etc
  default     =>    value
  minimum     =>    number, or undef
  maximum     =>    number, or undef
  width       =>    integer, suggested display size
  choices     =>    for enum, an arrayref     
}

type is a string, one of

"integer"
"enum"
"boolean"
"string"
"filename"

"filename" is separate from "string" since it might require subtly different handling to ensure it reaches Perl as a byte string, whereas a "string" type might in principle take Perl wide chars.

For "enum" the choices field is the possible values, such as

{ name => "flavour",
  type => "enum",
  choices => ["strawberry","chocolate"],
}

minimum and maximum are omitted if there's no hard limit on the parameter.

Optional Methods

The following methods are only implemented for some sequences, since it's sometimes difficult to generate an arbitrary numbered element etc. Check with $seq->can('ith') etc before using.

$value = $seq->ith($i)

Return the $i'th value in the sequence. Only some sequence classes implement this method.

$bool = $seq->pred($value)

Return true if $value occurs in the sequence. For example for the squares this would return true if $value is a square or false if not.

SEE ALSO

Math::NumSeq::Squares, Math::NumSeq::Cubes, Math::NumSeq::Pronic, Math::NumSeq::Triangular, Math::NumSeq::Polygonal, Math::NumSeq::Tetrahedral, Math::NumSeq::StarNumbers, Math::NumSeq::Even, Math::NumSeq::Odd, Math::NumSeq::All Math::NumSeq::AllDigits

Math::NumSeq::Primes, Math::NumSeq::TwinPrimes, Math::NumSeq::SophieGermainPrimes, Math::NumSeq::AlmostPrimes, Math::NumSeq::Emirps, Math::NumSeq::MobiusFunction, Math::NumSeq::PrimeFactorCount, Math::NumSeq::DivisorCount,

Math::NumSeq::Totient, Math::NumSeq::TotientCumulative, Math::NumSeq::TotientSteps, Math::NumSeq::TotientPerfect

Math::NumSeq::Factorials, Math::NumSeq::Primorials, Math::NumSeq::Fibonacci, Math::NumSeq::LucasNumbers, Math::NumSeq::Fibbinary, Math::NumSeq::FibbinaryBitCount, Math::NumSeq::Pell, Math::NumSeq::Tribonacci, Math::NumSeq::Perrin

Math::NumSeq::FractionDigits, Math::NumSeq::SqrtDigits, Math::NumSeq::SqrtEngel

Math::NumSeq::DigitCount, Math::NumSeq::DigitCountLow, Math::NumSeq::DigitCountHigh

Math::NumSeq::DigitLength, Math::NumSeq::DigitLengthCumulative, Math::NumSeq::DigitProduct, Math::NumSeq::DigitSum, Math::NumSeq::DigitSumModulo, Math::NumSeq::RadixWithoutDigit

Math::NumSeq::Palindromes, Math::NumSeq::Beastly, Math::NumSeq::Repdigits, Math::NumSeq::RepdigitAny, Math::NumSeq::RepdigitRadix, Math::NumSeq::HarshadNumbers, Math::NumSeq::HappyNumbers

Math::NumSeq::CullenNumbers, Math::NumSeq::ProthNumbers, Math::NumSeq::WoodallNumbers, Math::NumSeq::BaumSweet, Math::NumSeq::KlarnerRado, Math::NumSeq::MephistoWaltz

Math::NumSeq::CollatzSteps, Math::NumSeq::JugglerSteps, Math::NumSeq::SternDiatomic, Math::NumSeq::NumAronson

Math::NumSeq::Kolakoski, Math::NumSeq::GolombSequence, Math::NumSeq::AsciiSelf

Math::NumSeq::Aronson (in the Math-Aronson dist), Math::NumSeq::PlanePathCoord (in the Math-PlanePath dist)

Math::Sequence and Math::Series, for symbolic recursive sequence definitions

math-image

HOME PAGE

http://user42.tuxfamily.org/math-numseq/index.html

LICENSE

Copyright 2010, 2011 Kevin Ryde

Math-NumSeq is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.

Math-NumSeq is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Math-NumSeq. If not, see <http://www.gnu.org/licenses/>.