avernoro Posted January 25, 2007 at 07:13 PM Report #78582 Posted January 25, 2007 at 07:13 PM 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.
Rui Carlos Posted January 25, 2007 at 07:19 PM Report #78585 Posted January 25, 2007 at 07:19 PM 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]] Rui Carlos Gonçalves
avernoro Posted January 27, 2007 at 06:17 PM Author Report #78923 Posted January 27, 2007 at 06:17 PM 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
Rui Carlos Posted January 27, 2007 at 06:23 PM Report #78925 Posted January 27, 2007 at 06:23 PM é de mim ou a tua função 'elementosAte' é igual à função 'take'? andar a reinventar a roda não é muito boa ideia 😉 Rui Carlos Gonçalves
avernoro Posted January 27, 2007 at 06:33 PM Author Report #78929 Posted January 27, 2007 at 06:33 PM pois não me lembrei da função take e como senti necessidade da função...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now