Auto-Mata

 view release on metacpan or  search on metacpan

examples/fib.pl  view on Meta::CPAN

#-------------------------------------------------------------------------------
# Calculates fibonacci numbers for arguments passed into the command line
#
# The algorithm used is based on the solution described here:
#   http://stackoverflow.com/a/16389221
#-------------------------------------------------------------------------------
use strict;
use warnings;
use Scalar::Util 'looks_like_number';
use Types::Standard -all;
use Type::Utils -all;
use Auto::Mata;

my $Number   = declare 'Number', as Str, where { looks_like_number $_ };
my $ZeroPlus = declare 'ZeroPlus', as $Number, where { $_ >= 0 };
my $Invalid  = declare 'Invalid', as ~$ZeroPlus;
my $Zero     = declare 'Zero', as $Number, where { $_ == 0 };
my $One      = declare 'One',  as $Number, where { $_ == 1 };
my $Term     = declare 'Term', as $Number, where { $_ >= 2 };
my $Start    = declare 'Start', as Tuple[$ZeroPlus];
my $Step     = declare 'Step', as Tuple[$Term, $ZeroPlus, $ZeroPlus];
my $CarZero  = declare 'CarZero', as Tuple[$Zero, $ZeroPlus, $ZeroPlus];
my $CarOne   = declare 'CarOne', as Tuple[$One, $ZeroPlus, $ZeroPlus];



( run in 0.349 second using v1.01-cache-2.11-cpan-64827b87656 )