Курс 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Коментарі
Числа кладуть на стек. Оператор знімає два найсвіжіші значення, поєднує їх і кладе результат назад — у цьому й суть постфіксного обчислення.
do given $tokenперетворює оператор на потрібну арифметику, а порядок спершу$a, потім$b(знятих у зворотному порядку) тримає віднімання та ділення правильним боком.
Навігація курсом
← Калькулятор зворотного польського запису | Текстова гістограма →