http://www.perlmonks.org?node_id=11121321

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);

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);

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);