estrelusca Posted January 10, 2010 at 10:51 PM Report Share #305319 Posted January 10, 2010 at 10:51 PM ola alguem podia me ajudar, como é que eu faço para duplicar todos os elementos de uma lista? obrigado Link to comment Share on other sites More sharing options...
Rui Carlos Posted January 10, 2010 at 10:57 PM Report Share #305328 Posted January 10, 2010 at 10:57 PM Duplicas o elemento da cabeça, e depois chamas a função recursivamente para a cauda. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
estrelusca Posted January 11, 2010 at 12:48 PM Author Report Share #305424 Posted January 11, 2010 at 12:48 PM obrigado pela explicação mas mesmo assim não consegui fazer fiz assim mas não deu alguem pode me ajudar duplicar :: [int] -> [int] dupplicar [] = [] duplicar (x:xs) |head (x:xs) = duplicar tail (x:xs) |otherwise = x : duplicar (x:xs) Link to comment Share on other sites More sharing options...
marco_iku Posted January 11, 2010 at 02:44 PM Report Share #305439 Posted January 11, 2010 at 02:44 PM duplicar :: [int] -> [int] dupplicar [] = [] duplicar (x:xs) |head (x:xs) = duplicar tail (x:xs) |otherwise = x : duplicar (x:xs) tens a função mal escrita "dupplicar" primeiro tens que definir o estado de paragem duplicar :: [int] -> [int] duplicar [] = [] depois tens que perceber o que fazes quando escreves (x:xs) o "x" é o primeiro elemento da lista (head) o "xs" é todo o resto da lista (tail), por exemplo na lista [1,2,3,4,5] o x=1 e o xs=[2,3,4,5] O que tu queres é multiplicar a cabeça da lista, e adicionar esse resultado à nova lista. E chamas novamente a função, mas desta vez apenas com a cauda. duplicar (x:xs) = (2*x) : (duplicar xs) --------------------------------------------- Não sei se já aprendeste a função map Esta função aplica uma função a todos os elementos de uma lista e devolve a nova lista utilizando o map ficaria deste modo duplicar :: [int] -> [int] duplicar x = map (2*) x Mas se ainda não aprendeste tens aqui um exemplo de como funciona. Mas se não percebes então esquece para não complicar 👍 vais ter tempo para aprender. Link to comment Share on other sites More sharing options...
estrelusca Posted January 11, 2010 at 02:52 PM Author Report Share #305442 Posted January 11, 2010 at 02:52 PM duplicar :: [int] -> [int] duplicar [] = [] duplicar [x] = [x,x] duplicar (x:xs) = x: duplicar xs fiz assim mas so duplica o ultimo elemento, por exemplo duplicar [2,4,6] da me [2,4,6,6] mas eu quero que me de [2,2,4,4,6,6] faço como? Link to comment Share on other sites More sharing options...
Baderous Posted January 11, 2010 at 06:18 PM Report Share #305473 Posted January 11, 2010 at 06:18 PM Para duplicar, apenas tens de escrever cada elemento da lista inicial duas vezes na lista final: duplica [] = [] duplica (x:xs) = x:x:(duplica xs) Link to comment Share on other sites More sharing options...
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