Skip to content

Commit

Permalink
Add infix:<gcd> and infix:<lcm> operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
pmichaud committed May 11, 2011
1 parent 43180b9 commit b5084f6
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/Perl6/Grammar.pm
Expand Up @@ -1821,6 +1821,8 @@ token prefix:sym<|> { <sym> <O('%symbolic_unary')> }
token infix:sym<*> { <sym> <O('%multiplicative')> }
token infix:sym</> { <sym> <O('%multiplicative')> }
token infix:sym<div> { <sym> >> <O('%multiplicative')> }
token infix:sym<gcd> { <sym> >> <O('%multiplicative')> }
token infix:sym<lcm> { <sym> >> <O('%multiplicative')> }
token infix:sym<%> { <sym> <O('%multiplicative')> }
token infix:sym<mod> { <sym> >> <O('%multiplicative')> }
token infix:sym<%%> { <sym> <O('%multiplicative, :iffy<1>')> }
Expand Down
8 changes: 8 additions & 0 deletions src/core/Int.pm
Expand Up @@ -104,6 +104,14 @@ our multi sub infix:<div>(Int $a, Int $b) {
upgrade_to_num_if_needed(pir::fdiv__NNN($a, $b));
}

our multi sub infix:<gcd>(Int $a, Int $b) {
pir::gcd__Iii($a, $b)
}

our multi sub infix:<lcm>(Int $a, Int $b) {
pir::lcm__Iii($a, $b)
}

our multi sub infix:<%>(Int $a, Int $b) {
upgrade_to_num_if_needed(pir::mod__NNN($a, $b))
}
Expand Down
6 changes: 3 additions & 3 deletions src/core/Rat.pm
Expand Up @@ -13,7 +13,7 @@ class Rat is Cool does Real {
$numerator = -$numerator;
$denominator = -$denominator;
}
my $gcd = $numerator.gcd($denominator);
my $gcd = $numerator gcd $denominator;
$numerator = $numerator div $gcd;
$denominator = $denominator div $gcd;
self.bless(*, :numerator($numerator), :denominator($denominator));
Expand Down Expand Up @@ -51,7 +51,7 @@ multi sub prefix:<->(Rat $a) {
}

multi sub infix:<+>(Rat $a, Rat $b) {
my $gcd = $a.denominator.gcd($b.denominator);
my $gcd = $a.denominator gcd $b.denominator;
($a.numerator * ($b.denominator div $gcd) + $b.numerator * ($a.denominator div $gcd))
/ (($a.denominator div $gcd) * $b.denominator);
}
Expand All @@ -65,7 +65,7 @@ multi sub infix:<+>(Int $a, Rat $b) {
}

multi sub infix:<->(Rat $a, Rat $b) {
my $gcd = $a.denominator.gcd($b.denominator);
my $gcd = $a.denominator gcd $b.denominator;
($a.numerator * ($b.denominator div $gcd) - $b.numerator * ($a.denominator div $gcd))
/ (($a.denominator div $gcd) * $b.denominator);
}
Expand Down

0 comments on commit b5084f6

Please sign in to comment.