Lista VS Vetores

Embora Listas e Vetores sejam muito semelhantes, sendo estruturas sequências ordenadas, por debaixo do capô elas são bem diferentes. Então porquê o Clojure mantêm implementações/estruturas similares?

rastro da via láctea Tirei essa foto do meu celular em Viçosa no Ceará durante minhas férias em Agosto de 2022.

Vetores

Não são só os colchetes que diferenciam os vetores das listas. Você pode pensar em um Vetor como um pedaço de alocação de memória contínua, sem tamanho predefinido, onde é possível ir alocando itens dinamicamente.

vector

(def vector-numbers [1 2 3 4])

(conj vector-numbers 5)
;; => [1 2 3 4 5]

Listas

Listas, além de serem representadas através de parentes, por outro lado, são implementadas de forma “vinculadas”,ou seja, você pode pensar em listas como estruturas duplas ligadas umas às outras.

vector

(def list-numbers '(1 2 3 4))

(conj list-numbers 5)
;; => [5 1 2 3 4]

Conclusão

As duas abordagens apresentam pontos fortes bem diferentes. Em estruturas consideravelmente grandes, ir até uma determinada posição dentro de um Vetor pode ser considerado uma tarefa bastante rápida, isso pelo fato que o Clojure, internamente, usa um algoritmo para saber a localização. Já a Lista, irá precisar percorrer todos os elementos até chegar a determinada posição. Embora pareça que os vetores têm uma certa “vantagem”, as listas são bastante úteis, especialmente nas situações em que você deseja criar uma sequência anexando novos itens como demonstrado no exemplo anterior.

Referências

  • Getting Clojure - Book