Ir para o conteúdo
HIT_Braga

Dúvida sobre listas

Mensagens Recomendadas

HIT_Braga    0
HIT_Braga

Boas ppl.

Antes de mais ainda bem que existem fóruns como este. Sou novato por aki mas gostava de poder já contar com a ajuda preciosa de quem sabe e percebe. Quando for o caso eu tb ajudarei no que souber :confused:

Já estou literalmente farto de  :wallbash:.

O meu problema é tenho uma lista de listas, quero trabalhar sobre uma lista e depois voltar a coloca-la no mesmo sitio.

[[1,1],[],[],[],[]] quero pegar numa determinada lista colocar um elemento e voltar a construir como estava [[1,1],[],[],[],[1]]

Isto é o meu código:

escreve::[[int]]->Int->Int->[[int]]
escreve list pos num= let a= aux list !!pos
                                    in ?????????
aux::[int]->Int->[int]
aux list pos= pos:list

Tao vamos lá ver. A função escreve recebe uma lista de listas, um inteiro que é a posição da lista, um inteiro que é o que eu desejo colocar lá e devolve a lista de listas

Quando faço "let a" pego na lista que está na posição que eu desejo alterar. na função aux, pego na lista devolvida escrevo o inteiro que quero e devolvo a nova lista.Agoar como a volto a colocar no sitio direitinho é que não sei. :rant_01:

Sds,

HIT_Braga

Partilhar esta mensagem


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

Com as funções take e drop isso é simples. Pegas nos elementos até à posição x, e nos elementos que estão depois da posição x, e juntas as listas.

Partilhar esta mensagem


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

Tens a lista [1,2,3,4,5].

Queres substituir o 3º elemento por 10.

Pegas nos 2 primeiros elementos, através do take ([1,2]).

Pegas no resultado de deitar fora os 3 primeiros elementos, através do drop ([4,5]).

Juntas [1,2]++[10]++[4,5].

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HIT_Braga    0
HIT_Braga

Boas

Antes de mais desde já obrigado pelo tempo disponibilizado.

O problema se calhar não foi bem explicado, pois com take e drop não soluciona o problema

tens uma lista de listas [ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ]

eu quero adicionar um determinado numero a uma determinada lista. Cada lista representa uma coluna. [[coluna1],[coluna2],[coluna3],[coluna4]].

Quando o utilizador carrega na tecla 4 irá inserir um numero nessa coluna(que é uma lista). com o take e drop fico lixado no caso da primeira coluna e da ultima.

O que eu tinha como ideia era

joga::[[int]]->Int->Int->[[int]]

--a será a posição na lista

--b será o inteiro que quero colocar

joga l a b = let x= l !!a --retira a lista que eu desejo para trabalhar

Depois com outra função faço o que eu quero à lista mas tenho o problema de não conseguir ficar com o resto da lista.

Imagina que tenho esta lista

[ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ]

faço joga [ [1,1,1,1,1],[2,2,2,2,2],[ ],[ ],[ ] ] 2 1, daqui resulta a lista [ ] mas o resto da lista eu quero guardar e construir com a nova lista com o numero 1 ou seja a lista

[ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ ],[ ] ], e assim sucessivamente.

joga [ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ ],[ ] ] 3 2 resulta [ [1,1,1,1,1],[2,2,2,2,2],[ 1 ],[ 2 ],[ ] ].

Espero ter-me expressado bem agora

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Experimenta isto:

joga l pos n = let ini = take (pos-1) l
	   fim = drop pos l
       in ini ++ [(add n l pos)] ++ fim
       

ind l pos = l!!(pos-1)

add n l pos = ( n $ ind l pos

Só tens de ter cuidado com a posição onde vais jogar, de modo a que não ultrapasse o tamanho da lista.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HIT_Braga    0
HIT_Braga

Muito obrigado Baderous...Foi muito útil a tua ajuda e a explicação do $. Gostava de poder esclarecer mais coisas contigo, visto que vou ter mais dúvidas  :cheesygrin:

Admin podem fechar este tópico tá resolvido

Partilhar esta mensagem


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

como é que ele vai saber se uma determinada posiçao da coluna está disponivel?

Armazenas numa variável qualquer a dimensão do tabuleiro (podes criar um tipo de dados que contenha, para além da lista, as dimensões do tabuleiro), e, ao efectuares uma nova jogada, vês se a coluna está dentro da dimensão, e se a dimensão da lista correspondente àquela coluna ainda é inferior ao número de linhas. Caso isto não se verifique, a jogada é inválida.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
carloskick    0
carloskick

por exemplo, tenho uma função k simplesment retorna uma lista vazia, e tenho outra k recebe esse lista e altera a mesma, pondo elementos na lista vazia...

a minha duvida é como é k eu guardo essa alterações da lista, para depois numa outra função usar a tal lista ja modificada pela outra função

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 os nossos Termos de Uso e Política de Privacidade