aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-034/roger-bell-west/perl5/ch-2.pl64
-rwxr-xr-xchallenge-034/roger-bell-west/perl6/ch-2.p661
2 files changed, 125 insertions, 0 deletions
diff --git a/challenge-034/roger-bell-west/perl5/ch-2.pl b/challenge-034/roger-bell-west/perl5/ch-2.pl
new file mode 100755
index 0000000000..133f0b7fc6
--- /dev/null
+++ b/challenge-034/roger-bell-west/perl5/ch-2.pl
@@ -0,0 +1,64 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+my @stack=();
+
+my %op=(
+ add => \&add,
+ '+' => \&add,
+ sub => \&sub,
+ '-' => \&sub,
+ mul => \&mul,
+ '*' => \&mul,
+ div => \&div,
+ '/' => \&div,
+ neg => \&neg,
+ dup => \&dup,
+ pop => \&pop,
+ exch => \&exch,
+ );
+
+foreach my $p (@ARGV) {
+ if (exists $op{$p}) {
+ $op{$p}->();
+ } elsif ($p =~ /^[.0-9]+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ print join(' ',@stack),"\n";
+}
+
+sub add {
+ push @stack,(pop @stack) + (pop @stack);
+}
+
+sub sub {
+ push @stack,-((pop @stack) - (pop @stack));
+}
+
+sub mul {
+ push @stack,(pop @stack) * (pop @stack);
+}
+
+sub div {
+ push @stack,1/((pop @stack) / (pop @stack));
+}
+
+sub neg {
+ push @stack,-(pop @stack);
+}
+
+sub dup {
+ push @stack,$stack[-1];
+}
+
+sub pop {
+ pop @stack;
+}
+
+sub exch {
+ ($stack[-1],$stack[-2])=($stack[-2],$stack[-1]);
+}
diff --git a/challenge-034/roger-bell-west/perl6/ch-2.p6 b/challenge-034/roger-bell-west/perl6/ch-2.p6
new file mode 100755
index 0000000000..ab7252072d
--- /dev/null
+++ b/challenge-034/roger-bell-west/perl6/ch-2.p6
@@ -0,0 +1,61 @@
+#! /usr/bin/perl6
+
+my @stack=();
+
+my %op=(
+ add => &add,
+ '+' => &add,
+ sub => &sub,
+ '-' => &sub,
+ mul => &mul,
+ '*' => &mul,
+ div => &div,
+ '/' => &div,
+ neg => &neg,
+ dup => &dup,
+ pop => &pop,
+ exch => &exch,
+ );
+
+for @*ARGS -> $p {
+ if (%op{$p}:exists) {
+ %op{$p}.();
+ } elsif ($p ~~ /^<[.0..9]>+$/) {
+ push @stack,$p;
+ } else {
+ die "Unknown input $p\n";
+ }
+ say join(' ',@stack);
+}
+
+sub add {
+ push @stack,(@stack.pop) + (@stack.pop);
+}
+
+sub sub {
+ push @stack,-((@stack.pop) - (@stack.pop));
+}
+
+sub mul {
+ push @stack,(@stack.pop) * (@stack.pop);
+}
+
+sub div {
+ push @stack,1/((@stack.pop) / (@stack.pop));
+}
+
+sub neg {
+ push @stack,-(@stack.pop);
+}
+
+sub dup {
+ push @stack,@stack[* -1];
+}
+
+sub pop {
+ @stack.pop;
+}
+
+sub exch {
+ (@stack[* -1],@stack[* -2])=(@stack[* -2],@stack[* -1]);
+}