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

35

Opmerkingen

  1. 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.

  2. do given $token maakt van de operator de juiste rekenkunde, en de volgorde $a en dan $b (in omgekeerde volgorde afgehaald) houdt aftrekken en delen de goede kant op.

Cursusnavigatie

Een omgekeerde-Poolse rekenmachine   |   Een teksthistogram