-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtwo_6.erl
73 lines (61 loc) · 1.64 KB
/
two_6.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-module(two_6).
-export([productDirect/1, productTail/1, testProductFunctions/0]).
-export([maximumDirect/1, maximumTail/1, testMaximumFunctions/0]).
% ==== PRODUCT ================
% NOTE we need the product of an empty list to be 1 as this
% supports the product
% of a one element list being itself
% direct version
productDirect([]) ->
1;
productDirect([X|Xs]) ->
X * productDirect(Xs).
% interface for tail version
productTail([]) ->
1;
productTail([X|Xs]) ->
productTail([X|Xs], 1).
% tail version
productTail([], ProductSoFar) ->
ProductSoFar;
productTail([X|Xs], ProductSoFar) ->
productTail(Xs, ProductSoFar * X).
% test product functions
testProductFunctions() ->
io:format("Testing product functions~n"),
true == (
(productDirect([]) == 1)
and (productDirect([4]) == 4)
and (productDirect([1,3,1,2,2]) == 12)
and (productTail([]) == 1)
and (productTail([4]) == 4)
and (productTail([1,3,1,2,2]) == 12)
).
% ==== MAXIMUM ================
% direct version
% maximumDirect([]) -> 0; % supports calling with an empty list
maximumDirect([X]) ->
X;
maximumDirect([X|Xs]) ->
max(X, maximumDirect(Xs)).
% interface for tail version
maximumTail([X]) ->
X;
maximumTail([X|Xs]) ->
maximumTail([X|Xs], 0).
% tail version
maximumTail([], MaxSoFar) ->
MaxSoFar;
maximumTail([X|Xs], MaxSoFar) ->
maximumTail(Xs, max(X, MaxSoFar)).
% test maximum functions
testMaximumFunctions() ->
io:format("Testing maximum functions~n"),
true == (
(maximumDirect([1]) == 1)
and (maximumDirect([4,8]) == 8)
and (maximumDirect([1,3,1,2,2]) == 3)
and (maximumTail([1]) == 1)
and (maximumTail([4,8]) == 8)
and (maximumTail([1,3,1,2,2]) == 3)
).