Curso de Raku / Apéndice 🆕 / Poniéndolo todo junto / Miniproyectos variados / Exercises / Una calculadora en notación polaca inversa
Solución: Una calculadora en notación polaca inversa
Aquí tienes una posible solución para la tarea.
Código
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];🦋 Puedes encontrar el código fuente en el archivo rpn-calculator.raku.
Salida
35Comentarios
Los números se apilan en una pila. Un operador desapila los dos valores más recientes, los combina y vuelve a apilar el resultado: la esencia de la evaluación postfija.
do given $tokenconvierte el operador en la aritmética adecuada, y el orden$ay después$b(desapilados al revés) mantiene la resta y la división en el sentido correcto.
Navegación del curso
← Una calculadora en notación polaca inversa | Un histograma de texto →