| Math-SymbolicX-Calculator documentation | Contained in the Math-SymbolicX-Calculator distribution. |
Math::SymbolicX::Calculator - A representation of a Symbolic Calculator
# You probably want to use on of the interfaces instead such as # Math::SymbolicX::Calculator::Interface::Shell use Math::SymbolicX::Calculator; my $calc = Math::SymbolicX::Calculator->new(); my $cmd = $calc->new_command(...); # ... $calc->execute($cmd);
This class represents the state of a symbolic calculator. It is mainly a glorified state hash of variables and their contents.
It can execute commands which are represented by Math::SymbolicX::Calculator::Command objects and which operate on the symbol table on some way.
Any slot of the symbol table may either contain a Math::Symbolic tree or a Math::Symbolic::Custom::Transformation object.
Returns a new Calculator object.
This method is a short-cut to
Math::SymbolicX::Calculator::Command's new method and
creates a new command object which can be executed using the
Calculator object.
Executes the command given as first argument. The command should be a Math::SymbolicX::Calculator::Command object. Returns any return values of the command's execution. (This may be a list!)
Accesses the symbol table hash with the symbol name given as first
argument. Valid symbol names match the regex /[A-Za-z][A-Za-z0-9_]*/.
(This is read only.)
First argument must be a symbol name. Accesses the Calculator symbol table to fetch a transformation from it that is saved as the symbol.
If the smybol table contains a transformation in the specified slot, that transformation is returned.
If it contains a formula, it manufactures a transformation from that formula which amounts to replacing the specified symbol with the formula.
If an error occurrs, an error message will be returned instead of
a Math::Symbolic::Custom::Transformation object.
Steffen Müller, <smueller@cpan.org>
Copyright (C) 2006 by Steffen Müller
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.6 or, at your option, any later version of Perl 5 you may have available.
| Math-SymbolicX-Calculator documentation | Contained in the Math-SymbolicX-Calculator distribution. |
package Math::SymbolicX::Calculator; use 5.006; use strict; use warnings; use Params::Util qw/_INSTANCE/; use Math::Symbolic (); use Math::Symbolic::Custom::Transformation; require Math::SymbolicX::Calculator::Command; our $VERSION = '0.01'; use vars qw/$Identifier_Regex/; $Identifier_Regex = qr/[a-zA-Z][a-zA-Z_0-9]*/;
sub new { my $proto = shift; my $class = ref($proto)||$proto; my $self = { stash => {}, history => [], }; bless $self => $class; return $self; }
sub new_command { my $self = shift; return Math::SymbolicX::Calculator::Command->new(@_); }
sub execute { my $self = shift; my $cmd = shift; my @output = $cmd->_execute($self); return @output; }
sub stash { my $self = shift; my $sym = shift; return $self->{stash}{$sym}; }
sub get_transformation { my $self = shift; my $sym = shift; my $obj = $self->stash($sym); if (_INSTANCE($obj, 'Math::Symbolic::Custom::Transformation')) { return $obj; } elsif (ref($obj) =~ /^Math::Symbolic::/) { # insertion of the form # "bar = baz^2; foo = bar+2; foo =~ bar;" ==> foo==baz^2+2 my $trafo; eval { $trafo = Math::Symbolic::Custom::Transformation->new( $sym, $obj ); }; if ($@ or not defined $trafo) { my $error = "Invalid transformation: '$sym -> $obj' " . ($@?" Error: $@":""); return($error); } return $trafo; } else { my $error = "Invalid or undefined symbol '$sym'"; return($error); } die "Sanity check"; } 1; __END__