quinta-feira, 7 de abril de 2011

Ordenação e contagem

insord y [] = [y]
insord y (x:xs) =
if y < x
then
y:x:xs
else
x:(insord y xs)

ordena2 [] ys = ys
ordena2 (x:xs) ys = ordena2 xs (insord x ys)

ordena xs = ordena2 xs []

corta xs i j = [xs!!k | k <- [i..(j-1)]]

separa xs = separa2 xs [] 0 0

separa2 xs ys i j =
if j == length xs
then
(corta xs i j):ys
else
if (xs!!j) == '.' || (xs!!j) == ',' || (xs!!j) == '?' || (xs!!j) == '!' || (xs!!j) == ';' || (xs!!j) == ':' || (xs!!j) == ' '
then
if i == j
then
separa2 xs ys (i + 1) (j + 1)
else
separa2 xs ((corta xs i j):ys) (j+1) (j+1)
else
separa2 xs ys i (j+1)

ordenaTexto xs = ordena (separa xs)

conta xs = conta2 xs []

conta2 [] ys = ys
conta2 (x:xs) [] = conta2 xs [(x,1)]
conta2 (x:xs) ys =
if (fst (last ys)) == x
then
conta2 xs ((tail ys) ++ [(fst (last ys), (snd (last ys))+1)])
else
conta2 xs (ys++[(x,1)])

repeticoes xs = conta (ordenaTexto xs)

Nenhum comentário:

Postar um comentário