Packages

A featureful rational number type for Gleam.

Current section

Files

Jump to
glat src glat@util.erl
Raw

src/glat@util.erl

-module(glat@util).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([int_power_check/2, int_power/2, gcd/2]).
-file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 22).
-spec do_int_power(integer(), integer(), integer()) -> integer().
do_int_power(Acc, Base, Exp) ->
case Exp of
1 ->
Acc * Base;
_ ->
do_int_power(Acc * Base, Base, Exp - 1)
end.
-file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 7).
-spec int_power_check(integer(), integer()) -> {ok, integer()} | {error, nil}.
int_power_check(Base, Exponent) ->
case Exponent of
_ when Exponent < 0 ->
{error, nil};
0 ->
{ok, 1};
1 ->
{ok, Base};
2 ->
{ok, Base * Base};
_ ->
{ok, do_int_power(1, Base, Exponent)}
end.
-file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 18).
-spec int_power(integer(), integer()) -> integer().
int_power(Base, Exponent) ->
_pipe = int_power_check(Base, Exponent),
gleam@result:unwrap(_pipe, 0).
-file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 29).
-spec gcd(integer(), integer()) -> integer().
gcd(A, B) ->
case {A, B} of
{_, 0} ->
gleam@int:absolute_value(A);
{0, _} ->
gleam@int:absolute_value(B);
{_, _} ->
gcd(B, case B of
0 -> 0;
Gleam@denominator -> A rem Gleam@denominator
end)
end.