Курс Raku / Додаток 🆕 / Збираємо все разом / Мішані міні-проєкти / Вправи / Калькулятор зворотного польського запису

Розв’язання: Калькулятор зворотного польського запису

Ось одне з можливих розв’язань задачі.

Код

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 (знятих у зворотному порядку) тримає віднімання та ділення правильним боком.

Навігація курсом

Калькулятор зворотного польського запису   |   Текстова гістограма