• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jamirooo

[Resolvido] Duvida no projecto

5 mensagens neste tópico

boas! ando aqui ás voltas com um projecto de haskell e numa das fases do projecto tenho uma lista de Strings e quero dividi-la e consequentemente junta-la num outra lista, de listas de Strings...O numero inserido é o numero maximo de caracteres por cada lista de Strings, por outras palavras :

Main > ["O", "Haskell", "e", "bue", "fixe" ]   5

>[ ["O"],

    ["Haskell"],

   ["e","bue"],

   ["fixe"] ]

   

separalinhas :: [string]->Int->[[string]]

separalinhas' :: [string]->Int->[[string]]->[[string]]

separalinhas (x:xs) n = separalinhas' (x:xs) n []

separalinhas' [] 0 [] = []
separalinhas' (x:xs) n (y:ys:zs) | xs == [] =  [x](ys):zs)
                                 | length x + sum (map length (ys)) <= n 
                                        = separalinhas' xs n ((ys++[x]):zs)
		         			 | otherwise = separalinhas' (x:xs) n zs

ora isto para mim, e para o meu colega, fas sentido mas ele (o hugs) "queixa-se" de "Non-exhaustive patterns in function separalinhas' " ...

pode parecer um pouco de mais tar a pedir, mas já andamos algumas horas a fazer esta "pequena" parte e ainda nao está a funcionar...

Obrigado desde já

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No início, a primeira lista que passas à função separa linhas não está vazia e a segunda está.

No entanto, só consideras os casos em que ambas as listas estão vazias (e o 2º argumento é 0), e em que a primeira lista tem pelo menos 1 elemento e a segunda pelo menos 2.

Aconselhava-te a usar mais um acumulador temporário, onde ias colocando as strings que ainda não tivessem ultrapassado o limite.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que queres dizer como usar mais um acumulador temporario? por exemplo assim?

separalinhas' (x:xs) n ((y:ys):zs) (ks:kss)    

???

=/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era mais

separalinhas' (h:t) n tmp res

(só a primeira lista é que não deve ser vazia)

Vais adicionando as strings ao tmp, e quando este estiver prestes a exceder o limite, copias o tmp para o res.

0

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