Thread Prefix-Terme berechnen (19 answers)
Opened by Ronnie at 2005-06-05 01:10

Ronnie
 2005-06-05 01:10
#55330 #55330
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich überlege wie man mit Perl Terme im LISP-Stil lösen kann, wie z.B. (* 3 (+ 2 1) 4) was 36 ergeben würde. Grundlegend ist klar das es rekursiv gelöst werden könnte. Aber irgendwie weiß ich nicht wo ich anfangen soll. Wie handle ich z.B. am geschicktesten die geklammerten Ausdrücke? Regexp::Common::balanced ist wohl der falsche Ansatz.

Hier ein Ansatz der einen nicht geschachtelten Ausdruck berechnen kann, aber irgendwie fehlt mir der nächste Schritt?!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl

use strict;
use warnings;

my $operators = {
'+' => sub { my $i=shift @_; $i += $_ for @_; return $i },
'-' => sub { my $i=shift @_; $i -= $_ for @_; return $i },
'*' => sub { my $i=shift @_; $i *= $_ for @_; return $i },
'/' => sub { my $i=shift @_; $i /= $_ for @_; return $i },
};

my $task = "/ 12 2 2";
print solve($task), "\n";
exit;

sub solve {
my $to_solve = shift @_ || die "solve(): no parameter\n";
my ($op, @vals) = split /\s+/, $to_solve;
die "solve(): wrong operator or to less values"
unless (exists $operators->{$op} && $#vals >= 1);
return $operators->{$op}(@vals);
}

View full thread Prefix-Terme berechnen