From 74b98d3b76ff216235cd6e2e649cec61ffde3ee0 Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Tue, 23 Apr 2019 00:23:41 +0200 Subject: [perl] p1,p2 --- perl/p1.pl | 18 ++++++++++++++++++ perl/p2.pl | 41 +++++++++++++++++++++++++++++++++++++++++ perl/template.pl | 9 +++++++++ 3 files changed, 68 insertions(+) create mode 100644 perl/p1.pl create mode 100644 perl/p2.pl create mode 100644 perl/template.pl diff --git a/perl/p1.pl b/perl/p1.pl new file mode 100644 index 0000000..e13aa31 --- /dev/null +++ b/perl/p1.pl @@ -0,0 +1,18 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use List::Util qw(reduce); + +# Functional +print (reduce { $a + $b } (grep { $_ % 3 == 0 || $_ % 5 == 0 } 1..999)); +print "\n"; + +# Imperative +my $sum; +foreach my $i (1..999) { + if ($i % 3 == 0 || $i % 5 == 0) { + $sum += $i; + } +} +print "$sum\n"; diff --git a/perl/p2.pl b/perl/p2.pl new file mode 100644 index 0000000..ec85ec1 --- /dev/null +++ b/perl/p2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +# Functional (naïve) +sub iter1 { + my ($fibs, $acc) = @_; + my ($a, $b) = @$fibs; + if ($a > 4_000_000) { + return $acc; + } else { + iter1([$b, $a+$b], $a & 1 ? $acc : $acc + $a); + } +} +print iter1([1, 2], 0); +print "\n"; + +# Functional (tail recursive) +sub iter2 { + my ($fibs, $acc) = @_; + my ($a, $b) = @$fibs; + if ($a > 4_000_000) { + return $acc; + } else { + @_ = ([$b, $a+$b], $a & 1 ? $acc : $acc + $a); + goto &iter2; + } +} +print iter2([1, 2], 0); +print "\n"; + +# Imperative +my ($a, $b) = (1, 2); +my $resp = 0; +do { + $resp += $a unless ($a & 1); + ($a, $b) = ($b, $a+$b); +} while ($a <= 4_000_000); + +print "$resp\n" diff --git a/perl/template.pl b/perl/template.pl new file mode 100644 index 0000000..4f2ec78 --- /dev/null +++ b/perl/template.pl @@ -0,0 +1,9 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +# Functional + +# Imperative + -- cgit v1.2.3