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.
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.
The intention is that all modules Math::NumSeq::Foo
are sequence classes, and that supporting things are deeper, such as under Math::NumSeq::Something::Helper
or Math::NumSeq::Base::SharedStuff
.
FUNCTIONS
In the following "Foo" is one of the subclass names.
$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 positionrewind()
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, orundef
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 returnundef
if not in the OEIS or not known. For examplemy $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() share_key => string, or undef 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
andmaximum
are omitted (orundef
) if there's no hard limit on the parameter.share_key
is designed to indicate when parameters from different NumSeq classes can be a single control widget in a GUI etc. Normally thename
is enough, but when the same name has slightly different meanings in different classes ashare_key
allows the same meanings to be matched up.
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. $i = $seq->value_to_i_floor($value)
-
Return the index i of
$value
, or if$value
doesn't occur in the sequence then the i of the next lower value which does. This method only exists for non-decreasing sequences. $i = $seq->value_to_i_estimate($value)
-
Return an estimate of the i value corresponding to
$value
. This method only exists for non-decreasing sequences, and the accuracy of the estimate is unspecified, but when available it can at least hint at the growth rate.
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::Powerful Math::NumSeq::PowerPart
Math::NumSeq::Even, Math::NumSeq::Odd, Math::NumSeq::All, Math::NumSeq::AllDigits, Math::NumSeq::ConcatNumbers, Math::NumSeq::Runs
Math::NumSeq::Primes, Math::NumSeq::TwinPrimes, Math::NumSeq::SophieGermainPrimes, Math::NumSeq::AlmostPrimes, Math::NumSeq::Emirps, Math::NumSeq::MobiusFunction, Math::NumSeq::LiouvilleFunction, Math::NumSeq::PrimeFactorCount, Math::NumSeq::DivisorCount, Math::NumSeq::GoldbachCount, Math::NumSeq::LemoineCount, Math::NumSeq::PythagoreanHypots
Math::NumSeq::Totient, Math::NumSeq::TotientCumulative, Math::NumSeq::TotientSteps, Math::NumSeq::TotientStepsSum, Math::NumSeq::TotientPerfect, Math::NumSeq::DedekindPsiCumulative, Math::NumSeq::DedekindPsiSteps, Math::NumSeq::Abundant, Math::NumSeq::PolignacObstinate
Math::NumSeq::Factorials, Math::NumSeq::Primorials, Math::NumSeq::Fibonacci, Math::NumSeq::FibonacciWord, 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::SqrtContinued, Math::NumSeq::SqrtContinuedPeriod
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::UndulatingNumbers, Math::NumSeq::HarshadNumbers, Math::NumSeq::HappyNumbers, Math::NumSeq::HappySteps,
Math::NumSeq::CullenNumbers, Math::NumSeq::ProthNumbers, Math::NumSeq::WoodallNumbers, Math::NumSeq::BaumSweet, Math::NumSeq::KlarnerRado, Math::NumSeq::UlamSequence, Math::NumSeq::ReRound, Math::NumSeq::ReReplace, Math::NumSeq::MephistoWaltz
Math::NumSeq::CollatzSteps, Math::NumSeq::ReverseAdd, Math::NumSeq::ReverseAddSteps, Math::NumSeq::JugglerSteps, Math::NumSeq::SternDiatomic, Math::NumSeq::NumAronson, Math::NumSeq::HofstadterFigure
Math::NumSeq::Kolakoski, Math::NumSeq::GolombSequence, Math::NumSeq::AsciiSelf, Math::NumSeq::Multiples, Math::NumSeq::Modulo
Math::NumSeq::Expression, Math::NumSeq::File, Math::NumSeq::OEIS
Math::NumSeq::Aronson (in the Math-Aronson dist)
Math::NumSeq::PlanePathCoord, Math::NumSeq::PlanePathDelta, Math::NumSeq::PlanePathTurn (in the Math-PlanePath dist)
Other Modules Etc
Math::Sequence and Math::Series, for symbolic recursive sequence definitions
HOME PAGE
http://user42.tuxfamily.org/math-numseq/index.html
LICENSE
Copyright 2010, 2011, 2012 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/>.