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

estrelusca

ajuda para duplicar uma lista

Recommended Posts

estrelusca

ola

alguem podia me ajudar, como é que eu faço para duplicar todos os elementos de uma lista?

obrigado

Share this post


Link to post
Share on other sites
estrelusca

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)

Share this post


Link to post
Share on other sites
marco_iku

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  :thumbsup: vais ter tempo para aprender.

Share this post


Link to post
Share on other sites
estrelusca

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?

Share this post


Link to post
Share on other sites
Baderous

Para duplicar, apenas tens de escrever cada elemento da lista inicial duas vezes na lista final:

duplica [] = []
duplica (x:xs) = x:x:(duplica xs)

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.