Cursus Raku / Addendum 🆕 / Alles samenbrengen / Gemengde miniprojecten / Exercises / Een omgekeerde-Poolse rekenmachine
Oplossing: Een omgekeerde-Poolse rekenmachine
Hier is een mogelijke oplossing voor de taak.
Code
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];🦋 Je kunt de broncode vinden in het bestand rpn-calculator.raku.
Uitvoer
35Opmerkingen
Getallen worden op een stack geduwd. Een operator haalt de twee recentste waarden eraf, combineert ze, en duwt het resultaat terug — de kern van postfix-evaluatie.
do given $tokenmaakt van de operator de juiste rekenkunde, en de volgorde$aen dan$b(in omgekeerde volgorde afgehaald) houdt aftrekken en delen de goede kant op.