Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

AprendizZ

Dificuldade em exercicios com listas!

Mensagens Recomendadas

AprendizZ

Caros amigos,

Como sou novo nestas andanças do Haskell e como apesar de lá me ir safando sempre encalho

nalguma dificuldade, agradecia algum apoio em dois pequenos exercicios que não consigo desencalhar:

Pretendo criar uma rotina que crie uma lista de multiplos de x dentro de "periodo" de números.

Ora consegui criar o ciclo de ir incrementando o x acima do número mínimo e do máximo do periodo,

masnão consigo fechar a lista no final, ou seja, os multiplos que pretendo aparecem no resultado mas

o compilador não fecha a lista a continua a calcular o ciclo em background, até eu interromper a execução.

Para terem uma ideia aqui fica o código que fiz:

multi2 :: Int -> Int -> Int -> Int -> [int]

multi2 x w mi mx

| x == 0 = []

| x >= mi && x <= mx = x : multi2 (x + w) w mi mx

| otherwise = multi2 (x + w) w mi mx

x - valor do múltiplo

w - valor do múltiplo am ser incrementado no ciclo

mi - valor mínimo do periodo

mx - valor máximo do periodo

Como posso separar uma cadeia de algarismos em elementos de uma lista.

Exexmplo:

paraLista 2345678

resultado:

[2,3,4,5,6,7,8]

Agradeço mais uma vez o apoio e atenção dispensada.

AprendizZ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

Está a misturar o caso em que o x é menor que o mínimo, com o caso em que o x é maior, e não devias. No primeiro caso, deves continuar à procura de elementos, pois, admitindo que w é sempre positivo, ao incrementares o valor do x sabes que em algum momento vais obter um valor maior do que o mínimo, já no segundo caso deves devolver uma lista vazia, pois sabes que se o x é maior do que o máximo, nunca voltará a ser menor.

Já agora, o seguinte código faz o mesmo:

mult x inc mn mx = filter (>= mn) [x,x+inc..mx]

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.