Daniel D Jones schreef:

> Given something like the following:
>
> my @variables = [3, 7, 13, 4, 12];
> my @tests = ("2*a+b==c", "c-d+a==e");
>
> I need to be able to evaluate the mathematical truth of the tests

#!/usr/bin/perl
# beware: this approach is wrong

  use warnings;
  use strict;

  my $rv = qr~[-+]?(?:[0-9]+|[a-z]+)~ ;  # value
  my $ro = qr~(?:[-+*/^]|\*\*)~ ;        #  operator
  my $re = qr~\A $rv(?:$ro$rv)* == $rv \z~x ;

  my @v = <DATA> =~ /(\d+)/g ;
  print join(', ', @v), "\n" ;

  while ( <DATA> )
  {
    chomp ;
    tr/A-Z/a-z/ ;
    print "$_\t" ;
    unless (/$re/) { print "ERROR\n" ; next }

    s/([a-z])/($v[ord($1) - ord('a')])/g ;
    print "$_\t", eval() ? 'T' : 'F', "\n" ;
  }

__DATA__
3, 7, 13, 4, 12
2*a+b==c
c-d+a==e
c-d+a==a
c-d+a==ee
c-d++a==e
-D+c+a==E
2**a==8
2^a==8

-- 
Affijn, Ruud

"Gewoon is een tijger."



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to