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

estrelusca

ajuda para duplicar uma lista

Mensagens Recomendadas

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)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Partilhar esta mensagem


Ligação 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 os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.