LISP - Vetores
Vetores são matrizes unidimensionais, portanto, um subtipo de matriz. Vetores e listas são chamados coletivamente de sequências. Portanto, todas as funções genéricas de sequência e funções de matriz que discutimos até agora funcionam em vetores.
Criação de vetores
A função de vetor permite que você crie vetores de tamanho fixo com valores específicos. Leva qualquer número de argumentos e retorna um vetor contendo esses argumentos.
Exemplo 1
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(setf v1 (vector 1 2 3 4 5))
(setf v2 #(a b c d e))
(setf v3 (vector 'p 'q 'r 's 't))
(write v1)
(terpri)
(write v2)
(terpri)
(write v3)
Quando você executa o código, ele retorna o seguinte resultado -
#(1 2 3 4 5)
#(A B C D E)
#(P Q R S T)
Observe que o LISP usa a sintaxe # (...) como a notação literal para vetores. Você pode usar esta sintaxe # (...) para criar e incluir vetores literais em seu código.
No entanto, esses são vetores literais, portanto, modificá-los não é definido no LISP. Portanto, para programação, você deve sempre usar ovector função, ou a função mais geral make-array para criar vetores que você planeja modificar.
o make-arrayfunção é a forma mais genérica de criar um vetor. Você pode acessar os elementos do vetor usando oaref função.
Exemplo 2
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(setq a (make-array 5 :initial-element 0))
(setq b (make-array 5 :initial-element 2))
(dotimes (i 5)
(setf (aref a i) i))
(write a)
(terpri)
(write b)
(terpri)
Quando você executa o código, ele retorna o seguinte resultado -
#(0 1 2 3 4)
#(2 2 2 2 2)
Ponteiro de preenchimento
o make-array função permite que você crie um vetor redimensionável.
o fill-pointerO argumento da função controla o número de elementos realmente armazenados no vetor. É o índice da próxima posição a ser preenchida quando você adiciona um elemento ao vetor.
o vector-pushA função permite adicionar um elemento ao final de um vetor redimensionável. Ele aumenta o ponteiro de preenchimento em 1.
o vector-pop A função retorna o item empurrado mais recentemente e diminui o ponteiro de preenchimento em 1.
Exemplo
Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.
(setq a (make-array 5 :fill-pointer 0))
(write a)
(vector-push 'a a)
(vector-push 'b a)
(vector-push 'c a)
(terpri)
(write a)
(terpri)
(vector-push 'd a)
(vector-push 'e a)
;this will not be entered as the vector limit is 5
(vector-push 'f a)
(write a)
(terpri)
(vector-pop a)
(vector-pop a)
(vector-pop a)
(write a)
Quando você executa o código, ele retorna o seguinte resultado -
#()
#(A B C)
#(A B C D E)
#(A B)
Vetores sendo sequências, todas as funções de sequência são aplicáveis a vetores. Consulte o capítulo de sequências, para funções vetoriais.