 There's more than one way to do things PerlMonks

### Solving a maths problem with Perl

by tobyink (Canon)
 on Sep 03, 2020 at 10:39 UTC Need Help??

Simple maths problem.

an is defined as 1 + (1/n).

Sn is defined as a1 + a2 + ... + an.

So we're gonna calculate S15, and we're gonna use object-oriented programming because I'm me.

```use v5.16;

package Local::App {
use Zydeco;
use List::Util 'sum';

class Calc {
method a ( PositiveInt \$n ) = 1 + (1/\$n);
method S ( PositiveInt \$n ) = sum( map \$self->a(\$_), 1 .. \$n )
+;
}
}

my \$calc = Local::App->new_calc;
say \$calc->S(15);
[download]```

Or, using rational numbers:

```use v5.16;

package Local::App {
use Zydeco;
use List::Util 'sum';

class Calc {
method r ( \$n ) = 1/\$n;
method a ( PositiveInt \$n ) = 1 + \$self->r(\$n);
method S ( PositiveInt \$n ) = sum( map \$self->a(\$_), 1 .. \$n )
+;

class +Rational {
use Math::BigRat;
method r ( \$n ) = Math::BigRat->new("1/\$n");
}
}
}

my \$calc = Local::App->new_calc_rational;
say \$calc->S(15);
[download]```

Replies are listed 'Best First'.
Re: Solving a maths problem with Perl
by tobyink (Canon) on Sep 03, 2020 at 11:30 UTC

And yes, I'm aware it can be solved without object-oriented programming.

```use v5.16;

package Local::App2 {
use List::Util 'sum';
use Exporter::Shiny 'S';

sub a {
my \$n = shift;
1 + (1/\$n);
}
sub S {
my \$n = shift;
sum( map a(\$_), 1 .. \$n );
}
}

use Local::App2 'S';
say S(15);
[download]```

I like using OOP though because of the ease with which parts can be overridden, like in the rational number version.

Re: Solving a maths problem with Perl
by perlfan (Vicar) on Sep 30, 2020 at 19:08 UTC
>because I'm me.

I must say that I, for one, find all the oop modules you're churning out very interesting and fun to watch.

Log In?
 Username: Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://11121321]
Approved by marto
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (7)
As of 2021-04-16 12:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?