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