Solution 4-3
Here is a suggested solution for Étude 4-3.
powers.erl
%% @author J D Eisenberg <jdavid.eisenberg@gmail.com>
%% @doc Functions for raising a number to an integer power
%% and finding the Nth root of a number using Newton's method.
%% @copyright 2013 J D Eisenberg
%% @version 0.1
-
module
(
powers
).
-
export
([
raise
/
2
]).
%% @doc Raise a number X to an integer power N.
%% Any number to the power 0 equals 1.
%% Any number to the power 1 is that number itself.
%% When N is positive, X^N is equal to X times X^(N - 1)
%% When N is negative, X^N is equal to 1.0 / X^N
-
spec
(
raise
(
number
(),
integer
())
->
number
()).
raise
(_,
0
)
->
1
;
raise
(
X
,
1
)
->
X
;
raise
(
X
,
N
)
when
N
>
0
->
X
*
raise
(
X
,
N
-
1
);
raise
(
X
,
N
)
when
N
<
0
->
1
/
raise
(
X
,
-
N
).
powers_traced.erl
This code contains output that lets you see the progress of the recursion.
%% @author J D Eisenberg <jdavid.eisenberg@gmail.com>
%% @doc Functions for raising a number to an integer power
%% and finding the Nth root of a number using Newton's method.
%% @copyright 2013 J D Eisenberg
%% @version 0.1
-
module
(
powers_traced
).
-
export
([
raise
/
2
]).
%% @doc Raise a number X to an integer power N.
%% Any number to the power 0 equals 1.
%% Any number to the power 1 is that number itself.
%% When N is positive, X^N is equal to X times X^(N - 1)
%% When N is negative, X^N is equal to 1.0 / X^N
-
spec
(
raise
(
number
(),
integer
())
->
number
()).
raise
(_,
0
)
->
1
;
raise
(
X
,
1
)
->
X
;
raise
(
X
,
N
)
when
N
>
0
->
io
:
format
(
"Enter X:
~p
, N:
~p~n
"
,
[
X
,
N
]), ...
Get Études for Erlang now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.