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

avernoro

Lista por compreensao

5 mensagens neste tópico

Olá amigos alguém é capaz de me dizer como é que eu obtenho o seguinte resultado numa lista por compreensao, ou seja quero fazer uma lista por compreensao cujo resultado final seja o seguinte :

[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]

Se alguém souber agradeço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tem que ser com uma lista por compreensão?

isso com o fold é fácil: foldr (\x r-> [[ x ]]++(map (x:) r)) [] [1..5]

EDIT:

já descobri uma forma mais simples com listas por compreensão...

[take n [1..5] | n <- [1..5]]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah, obrigado eu não tinha pensado nisso, já tinha feito usando a recursividade, mas o exercicio era mesmo por compreensao, obrigado.

Já agora aqui fica usando recursividade:

geraLista :: [int]-> [[int]]
geraLista [] = []
geraLista l = geraLista (init l) ++ [elementosAte (length l) l]

elementosAte :: Int -> [int] -> [int]
elementosAte m (h:t) | (m == 1) = [h]
                     | otherwise = [h] ++ elementosAte (m-1) t

Um abraço atodos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é de mim ou a tua função 'elementosAte' é igual à função 'take'?

andar a reinventar a roda não é muito boa ideia  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois não me lembrei da função take e como senti necessidade da função...

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