Курс по Raku / Приложение 🆕 / Всичко наедно / Смесени мини проекти / Exercises / Калкулатор с обратен полски запис

Решение: Калкулатор с обратен полски запис

Ето едно възможно решение на задачата.

Код

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

🦋 Намерете програмата във файла rpn-calculator.raku.

Изход

35

Коментари

  1. Числата се слагат в стек. Операторът сваля двете най-скорошни стойности, съчетава ги и слага резултата обратно — това е същността на постфиксното изчисляване.

  2. do given $token превръща оператора в правилната аритметика, а редът първо $a, после $b (свалени в обратен ред) държи изваждането и делението правилно ориентирани.

Навигация в курса

Калкулатор с обратен полски запис   |   Текстова хистограма