Ir para o conteúdo
ASHASHIN

eliminar palavras com menos de 3 letras repetidas

Mensagens Recomendadas

ASHASHIN    0
ASHASHIN

Boas, tenho em mãos um problema em que para além de outras coisas preciso de eliminar todas as palavras (de uma lista de Strings) que não tenham pelo menos uma letra 3 vezes repetida, o que eu já fiz para tentar resolver esta parte do problema foi:

import Data.List
funcao [xs] = if length (maximum (group (sort [xs]))) >= 3 then xs else []

mas aparece o seguinte erro:

- Type error in explicitly typed binding
*** Term           : funcao
*** Type           : [string] -> [Char]
*** Does not match : [string] -> [string]

(funcao é o nome da função)

EDIT1: pequena alteração ao código

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

eu suponho que tenhas algo deste genero

import Data.List

funcao ::[string]->[string]
funcao (x:xs)=if length (maximum (group (sort xs))) >= 3 then xs else []

A função compila, e devolveste sempre 0, mas como a tua duvida era no erro, dizme uma coisa , qual é o tipo da tua função ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

então não sei onde esta o erro, a mim não me deu erro nenhum.

tenta outra vez e se continuar a dar erro faz um copy paste do que tens no txt aqui sff

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

O sort é aplicado a uma lista. Da maneira que tu estás a fazer, supondo que [xs] é uma lista de Strings, o que estás a fazer é ordenar a lista alfabeticamente (por ex: ["ana", "atirar", "azeite", "Benfica"]). O que eu penso que tu queres é ordenar os caracteres dentro de cada String para depois os agrupares (por ex: ["aan", "aairrt", "aeeitz", "Bacefin"]). Por isso não podes aplicar o sort à lista inicial, mas sim a cada uma das listas, assim como o group. Depois o maximum não te dá o maior elemento a lista em comprimento. Como estás a trabalhar com strings, dá-te o maior elemento alfabeticamente: (por ex: maximum ["aa","n"] = "n"). Por isso acho que não é bem isso que queres. Seria mais fácil se fizesses funções separadas para cada passo e só no fim é que as tentasses juntar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ASHASHIN    0
ASHASHIN

@Baderous: reparei nisso quando o erro desapareceu B)

Entretanto comecei a fazer o que tu sugeristes e reparei que quando faço group as letras maiusculas não ficavam agrupadas com a sua minuscula, comecei então a fazer uma função para as meter todas em minusculas e só depois as agrupar

toLowerAll :: [string] -> [string]
toLowerAll xs 
| null xs = []
| otherwise = (toLowerAll (head (head xs))) ++ (toLowerAll (tail(head xs))) ++ (toLowerAll (tail xs))

e aparece o seguinte erro

Type error in application
*** Expression     : toLowerAll (tail (head xs))
*** Term           : tail (head xs)
*** Type           : [Char]
*** Does not match : [string]

não percebo porque é que ele se queixa de um [Char]

se por exemplo xs = ["Sofia","Margarida"] head (tail xs) não deveria ser "ofia" ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Betovsky    2
Betovsky

não percebo porque é que ele se queixa de um [Char]

se por exemplo xs = ["Sofia","Margarida"] head (tail xs) não deveria ser "ofia" ?

Prelude> let xs = ["Sofia","Margarida"]
Prelude> head (tail xs)
"Margarida"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brunoais    69
brunoais

não percebo porque é que ele se queixa de um [Char]

se por exemplo xs = ["Sofia","Margarida"] head (tail xs) não deveria ser "ofia" ?

tail de xs é ["Margarida"]

head de ["Margarida"] é "Margarida"

tail de "Margarida" é "argarida"

tail (head ["Sofia","Margarida"])) é "ofia"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ASHASHIN    0
ASHASHIN

@Brunoais: sim tens razão, eu no meu exemplo enganei-me na ordem mas no código a ordem está certa (tail (head xs)), e continuo sem perceber o erro  :wallbash:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade