-
Notifications
You must be signed in to change notification settings - Fork 0
/
recursion.erl
38 lines (26 loc) · 1.22 KB
/
recursion.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
%------------------------------------------------
% Author: Kamran Amini <kam.cpp@gmail.com>
%------------------------------------------------
-module(recursion).
-author('Kamran Amini <kam.cpp@gmail.com>').
-export([fact/1, print_list/1, reverse_list/1, search_key/2]).
% Factoriel Example
fact(0) -> 1;
fact(N) when N > 0 -> N * fact(N - 1).
% Print List Example
print_list([]) -> done;
print_list([Head|Tail]) -> erlang:display(Head), print_list(Tail).
% Reverse List Example
reverse_list(List) -> internal_reverse_list(List, []).
internal_reverse_list([], Result) -> Result;
internal_reverse_list([Head|Tail], Result) -> internal_reverse_list(Tail, [Head|Result]).
% Search Key in List
search_key(List, Key) -> internal_search_key(List, Key, 1).
internal_search_key([], _, _) -> notfound;
internal_search_key([Key|_], Key, Index) -> {found, Index};
internal_search_key([_|Tail], Key, Index) -> internal_search_key(Tail, Key, Index + 1).
% Count Keys in List
count_key(List, Key) -> internal_count_key(List, Key, 0).
internal_count_key([], _, Count) -> Count.
internal_count_key([Key|Tail], Key, Count) -> internal_count_key(Tail, Key, Count + 1);
internal_count_key([Head|Tail], Key, Count) -> internal_count_key(Tail, Key, Count).