Exercício 1

(Solução)


Cabeçalho

-module(exercicio1).
-export([count/1, occur/2, delete/2, append/2, member/2, reverse/1, average/1]).
Índice

Count

count([]) -> 0;
count([H|L]) -> count(L)+1.
count(L) -> count(L,0).
count([],N) -> N;
count([H|L],N) -> count(L,N+1).
count(L) when list(L) -> count(L,0).
count([],N) -> N;
count([H|L],N) -> count(L,N+1).
Índice

Member

member(E,[E|_]) -> true;
member(E,[_|L]) -> member(E,L);
member(_,[]) -> false.
member(E,L) when list(L) ->
	L2=[X||X<-L,X==E],
	case L2 of
		[] -> false;
		_ -> true
	end.

Índice

Occur

occur(_,[]) -> 0;
occur(E,[E|L]) -> occur(E,L)+1;
occur(E,[_|L]) -> occur(E,L).
occur(E,L) when list(L) -> occur(E,L,0).
occur(_,[],N) -> N;
occur(E,[E|L],N) -> occur(E,L,N+1);
occur(E,[_|L],N) -> occur(E,L,N).
occur(E,L) when list(L) ->
	L2=[X||X<-L,X==L],
	count(L2).

Índice

Delete

delete(_,[]) -> [];
delete(E,[E|L]) -> delete(E,L);
delete(E,[A|L]) -> [A|delete(E,L)].

nota: esta versão não mantém os elementos pela ordem inicial.

delete(E,L) when list(L) -> delete(E,L,[]).
delete(_,[],A) -> A;
delete(E,[E|L],A) -> delete(E,L,A);
delete(E,[H|L],A) -> delete(E,L,[H|A]).
delete(E,L) when list(L) -> [X||X<-L,X=/=E].

Índice

Append

append([H|L1],L2) -> [H|append(L1,L2)];
append([],L2) -> L2.
append(L1,L2) when list(L1),list(L2) -> L1++L2.

Índice

Reverse

(usando acumulador e guardas)
reverse(L) -> reverse(L, []).

reverse([H|L], Reversed) -> reverse(L, [H|Reversed]);
reverse([], Reversed) -> Reversed.

Índice

Average

(usando acumulador e guardas)
average(L) -> average(L, 0, 0).

average([], N, S) -> S/N;
average([H|L], N, S) -> average(L, N+1, S+H).

Índice


Última actualização: 02-03-2004