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

avernoro

Lista por compreensao

Mensagens Recomendadas

avernoro    0
avernoro

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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]]

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
avernoro    0
avernoro

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

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 a nossa Política de Privacidade