23 lines
564 B
Raku
23 lines
564 B
Raku
my $proggie = '3 4 2 * 1 5 - 2 3 ^ ^ / +';
|
|
|
|
class RPN is Array {
|
|
|
|
method binop(&op) { self.push: self.pop R[&op] self.pop }
|
|
|
|
method run($p) {
|
|
for $p.words {
|
|
say "$_ ({self})";
|
|
when /\d/ { self.push: $_ }
|
|
when '+' { self.binop: &[+] }
|
|
when '-' { self.binop: &[-] }
|
|
when '*' { self.binop: &[*] }
|
|
when '/' { self.binop: &[/] }
|
|
when '^' { self.binop: &[**] }
|
|
default { die "$_ is bogus" }
|
|
}
|
|
say self;
|
|
}
|
|
}
|
|
|
|
RPN.new.run($proggie);
|