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 )