Skip to content

Instantly share code, notes, and snippets.

@andersonfraga
Created October 9, 2014 02:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andersonfraga/45285d6168ae3a7b6e75 to your computer and use it in GitHub Desktop.
Save andersonfraga/45285d6168ae3a7b6e75 to your computer and use it in GitHub Desktop.
E em 30mins brincando com esse tal de AliceML...
(********************
Especifique a função mediaListaSemPares que recebe uma lista de inteiros umaLista e retorna a média dos elementos de umaLista, descartando os valores pares (listas com 1 ou nenhum elemento, retornam vazias)
********************)
fun listaSemPares umaLista = List.filter (fn x => x mod 2 <> 0) umaLista;
fun somaLista [] = 0
| somaLista (x::res) = x + somaLista res;
fun mediaListaSemPares [] = 0.0
| mediaListaSemPares umaLista =
let
val listaImpares = listaSemPares umaLista
in
if length listaImpares > 0
then real(somaLista listaImpares) / real(length listaImpares)
else 0.0
end;
(*******************
Especifique a função listaSemMaior que recebe uma lista de inteiros umaLista e retorna outra lista igual a umaLista sendo excluído o maior valor.
*******************)
fun removeMaior(a, []) = []
| removeMaior(a, x::xs) =
if a > x
then x::(removeMaior(a, xs))
else a::(removeMaior(x, xs));
fun listaSemMaior [] = nil
| listaSemMaior(x::umaLista) = removeMaior(x, umaLista);
(*********************
Especifique a função espelhaDobraLista que recebe umaLista e retorna outra lista de forma que a primeira parte resultante é igual a umaLista em sequência invertida e a segunda parte é esta mesma lista na sequência original.
*********************)
fun espelhaDobraLista [] = []
| espelhaDobraLista umaLista = rev(umaLista) @ umaLista;
(*******************
Especifique a função semDoisExtremos que recebe uma lista umaLista e retorna uma lista semelhante sem os dois elementos extremos de umaLista (o primeiro e o último). Se umaLista tiver menos de dois elementos, retorna nil.
*******************)
fun semDoisExtremos [] = nil
| semDoisExtremos(x::umaLista) =
let
val novaLista = rev(umaLista)
in
if length novaLista = 0
then nil
else rev(tl(novaLista))
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment