Executando verificação de segurança...
3

Dúvida no Elixir

Fala turma,

comecei a estudar Elixir e achei um negócio estranho quando tentei fazer algo

iex(9)> lista = [1,2,3,4]
[1, 2, 3, 4]
iex(10)> [0 | lista]
[0, 1, 2, 3, 4]
iex(11)> lista ++ [5]
[1, 2, 3, 4, 5]
iex(12)> lista
[1, 2, 3, 4]
iex(13)> lista = [0 | lista]
[0, 1, 2, 3, 4]
iex(14)> lista
[0, 1, 2, 3, 4]
iex(15)> lista = lista ++ 5
[0, 1, 2, 3, 4 | 5]

alguém têm ideia do porque disso >> [0, 1, 2, 3, 4 | 5]

Carregando publicação patrocinada...
4

Isto acontece pois você está concatenando uma list com algo que não é uma list, o resultado que você vê é uma improper list, não tem tantos usos e é algo a ser evitado. Para mais informações você pode dar uma olhada aqui e aqui.

4

O comentário do @julianolorenzato está correto e acho que já reponde sua dúvida. Mas aqui vai uma curiosidade legal.

Em elixir listas são o que chamamos de listas ligadas, ou linked lists. E em muitos lugares você vai achar a seguinte representação para uma lista dessas:

Linked List

Cada "nó" dessa lista em linguagens funcionais é chamado de Par ou Pair. Onde o primeiro campo do par possui o valor do nó e o segundo em geral é um ponteiro para outro par. Por isso a chamamos de lista ligada. Sabemos onde é o fim da lista quando chegamos no par em que a segunda componente é nula. Por isso em muitas linguagens funcionais null (ou nil) e uma lista vazia são a mesma coisa. Se não me engano elixir é uma delas.

Mas o que acontece se o segundo slot do par não for preenchido com outro par? Bom, aí você tem o caso que você viu. Esse tipo de par não é necessariamente inútil. Em alguns dialetos de Lisp listas como essa em elixir: [[:a | 1], [:b | 2]]. São chamadas de listas associativas. E seria utilizadas de forma similar a maps ou dicionários.

Em Elixir não há necessidade de utilizá-las pós você já possui os maps que são mais eficientes. O que me intriga e confesso que não conheço são as chamadas keyword lists. Que talvez utilizem essa técnica. Bom uma vez que você está estudando a linguagem, talvez você mesmo possa descobrir.