Raku kurss / Pielikums 🆕 / Viss kopā / Jaukti miniprojekti / Exercises / Apgrieztā poļu pieraksta kalkulators

Risinājums: Apgrieztā poļu pieraksta kalkulators

Šeit ir iespējams risinājums uzdevumam.

Kods

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];

🦋 Atrodiet programmu failā rpn-calculator.raku.

Izvade

35

Komentāri

  1. Skaitļi tiek likti stekā. Operators izņem abas jaunākās vērtības, tās apvieno un rezultātu ieliek atpakaļ — tāda ir postfiksās aprēķināšanas būtība.

  2. do given $token operatoru pārvērš pareizajā aritmētikā, un secība — vispirms $a, tad $b (izņemti apgrieztā kārtībā) — atņemšanu un dalīšanu patur pareizajā virzienā.

Kursa navigācija

Apgrieztā poļu pieraksta kalkulators   |   Teksta histogramma