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

AprendizZ

Dificuldade em exercicios com listas!

Recommended Posts

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

Share this post


Link to post
Share on other 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]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.