Ir para o conteúdo
Polmax

Head vazia

Mensagens Recomendadas

Polmax    0
Polmax

import Text.Regex

import Text.Regex

encontrarR ::[[string]]->[[string]]
encontrarR [[]]=[]
encontrarR (x:xs) | Just [".mp3"] == matchRegex (mkRegex "(.mp3)") (head x) = x:encontrarR xs
                  |otherwise =encontrarR xs

Como faço para que quando head x seja vazio continue a funçao ?

por exemplo nesta lista [[],["string1,string2,string3"],[string1,string2],[],[string1,string2,string3],[]]

Outra duvida que eu tenho é fazer isto

import Text.Regex

encontrarR ::[[string]]->[[string]]
encontrarR [[]]=[]
encontrarR (x:xs) | Just [".mp3"] == matchRegex (mkRegex "(.mp3)") (head x) = x:encontrarR xs
                  |otherwise =encontrarR xs

funcaoPrincipal = do { 
                      a<-encontrarR (readFile "dataTexto.txt");
                      print a;
                     }
   

era aplicar a funcao encontrarR a um ficheiro de texto .

Provavelmente a vai ser um IO e nao uma string , como faço para ler aquele ficheiro e aplicar a funçao a ele?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpedro20    2
jpedro20

Quanto à primeira pergunta e segundo o que percebi o teu caso de paragem esta mal. Deveria ser:

encontrarR ::[[string]]->[[string]]
encontrarR [] = []  -- quando chegares ao fim da lista e não quando encontrares uma lista vazia na lista

agora tens de modificar para o caso de encontrares uma lista vazia dentro da lista senão aquele head vai dar-te um erro.

Na segunda questão não podes aplicar a função encontrarR uma vez que readFile não devolve uma lista de listas de Strings.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

E como faço para ler um ficheiro de texto e aplicar aquela função a ele ? ha alguma maneira?

Ficou assim

import Text.Regex

encontrarR ::[[string]]->[[string]]
encontrarR []=[]
encontrarR ([]:xs)=encontrarR xs 
encontrarR (x:xs) | Just [".mp3"] == matchRegex (mkRegex "(.mp3)") (head x) = x:encontrarR xs
                             |otherwise =encontrarR xs

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpedro20    2
jpedro20

Ficou assim

import Text.Regex

encontrarR ::[[string]]->[[string]]
encontrarR []=[]
encontrarR ([]:xs)=encontrarR xs 
encontrarR (x:xs) | Just [".mp3"] == matchRegex (mkRegex "(.mp3)") (head x) = x:encontrarR xs
                             |otherwise =encontrarR xs

Sim assim funciona.

Não sei o que pretendes fazer mas seria algo como ler do ficheiro (readFile), separar por linhas (lines) e para cada linha separar os diferentes campos (deves ter uma função para isso). Depois podes aplicar então a encontrarR.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Polmax    0
Polmax

Pois eu já consegui fazer o que queria , mas estaria a mentir se dissesse que percebi tudo .

Eu não percebo muito bem aquilo do IO , já li tanto mas não percebo muito bem .

se eu faço um let a=readFile  , a vai ser um IO ?

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