-module(exercicio1). -export([count/1, occur/2, delete/2, append/2, member/2, reverse/1, average/1]).
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).
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.
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).
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].
append([H|L1],L2) -> [H|append(L1,L2)]; append([],L2) -> L2.
append(L1,L2) when list(L1),list(L2) -> L1++L2.
(usando acumulador e guardas)
reverse(L) -> reverse(L, []). reverse([H|L], Reversed) -> reverse(L, [H|Reversed]); reverse([], Reversed) -> Reversed.
(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).
Última actualização: 02-03-2004