Kurso de Raku / Aldono 🆕 / Ĉio kune / Miksitaj mini-projektoj / Exercises / Kalkulilo kun inversa pola notacio
Solvo: Kalkulilo kun inversa pola notacio
Jen ebla solvo de la tasko.
Kodo
my $expression = '3 4 + 5 *';
my @stack;
for $expression.words -> $token {
if $token ~~ / ^ \d+ $ / {
@stack.push($token.Int);
}
else {
my $b = @stack.pop;
my $a = @stack.pop;
@stack.push( do given $token {
when '+' { $a + $b }
when '-' { $a - $b }
when '*' { $a * $b }
when '/' { $a / $b }
});
}
}
say @stack[0];🦋 Vi povas trovi la fontkodon en la dosiero rpn-calculator.raku.
Eligo
35Komentoj
Nombroj estas puŝataj sur stakon. Operatoro elprenas la du plej lastajn valorojn, kombinas ilin kaj repuŝas la rezulton — la esenco de postfiksa kalkulado.
do given $tokentransformas la operatoron en la ĝustan aritmetikon, kaj la ordo$aposte$b(elprenitaj inverse) tenas subtrahon kaj divison ĝustadirektaj.