Zoperman ya ha hecho la prueba de bajarlo, compilar una versión de Perl 6, y probar el resultado con un código de ejemplo de Perl 6.
Y parece que funciona
Using perl Syntax Highlighting
my %op_dispatch_table = {
'+' => { .push(.pop + .pop) },
'-' => { .push(.pop R
- .pop) },
'*' => { .push(.pop * .pop) },
'/' => { .push(.pop R
/ .pop) },
'sqrt' => { .push(.pop.sqrt ) },
};
sub evaluate
(%odt, $expr) {
my @stack;
my @tokens = $expr.split(/\s+/);
for @tokens {
when
/\d+/ { @stack.push($_); }
when
?%odt{$_} { %odt{$_}(@stack); }
default
{ die "Unrecognized token '$_'; aborting"; }
}
@stack.pop;
}
say
"Result: { evaluate(%op_dispatch_table, @*ARGS[0]) }";Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Curioso, además, como a partir del
ejemplo original de la calculadora RPN, Patrick Michaud implementa
un nuevo operador, para hacer el código más corto. Es el que veis más arriba:
R, que lo que hace es invertir el orden de los operandos. Así, (5 R- 4) es lo mismo que (4 - 5).
Esto lo ha hecho por razón de que las operaciones .pop devuelven resultados en orden inverso al que hay que procesarles.