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

35

Comentarios

  1. 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.

  2. do given $token convierte el operador en la aritmética adecuada, y el orden $a y después $b (desapilados al revés) mantiene la resta y la división en el sentido correcto.

Una calculadora en notación polaca inversa   |   Un histograma de texto