Acme-AlgebraicToRPN
view release on metacpan or search on metacpan
lib/Acme/AlgebraicToRPN.pm view on Meta::CPAN
sub new {
my ($class, %opts) = @_;
my $self = \%opts;
bless $self, $class;
$.stack = [];
$.parser = Math::Symbolic::Parser->new;
$.Class = $class;
if (defined $.userFunc) {
my @uf = @{$.userFunc};
my %uf;
map { $uf{$_} = 1 } @uf;
$.userFunc = \%uf;
my %x;
map {
my $proc = $_;
$x{$_} = sub {
my $argumentstring = shift;
return Math::Symbolic::Constant->new(
qq($proc($argumentstring))
);
};
} @uf;
Math::SymbolicX::ParserExtensionFactory->add_private_functions(
$.parser,
lib/Acme/AlgebraicToRPN.pm view on Meta::CPAN
sub rpn_as_string {
my ($self, $algebraic) = @_;
my @result = ./rpn($algebraic);
return join(",", @result);
}
sub _Cleanup {
my ($self) = @_;
my @Stack;
map {
$_ =~ s/^,//;
if ($_ ne '') {
my (@c) = split(',', $_);
if (@c) {
s/\s//g foreach @c;
push(@Stack, @c);
}
else {
push(@Stack, $_);
}
lib/Acme/AlgebraicToRPN.pm view on Meta::CPAN
Returns 1 if both @stack and @expected were the same, 0 if not.
=cut
sub check {
my ($self, $ref, @result) = @_;
my @shouldbe = @$ref;
return 0 unless @shouldbe == @result;
my $same = 1;
map {
my $sb = shift(@shouldbe);
$same = 0 unless $sb eq $_;
} @result;
return $same;
}
1; # End of Acme::AlgebraicToRPN
( run in 0.530 second using v1.01-cache-2.11-cpan-140bd7fdf52 )