LISP - Vektoren

Vektoren sind eindimensionale Arrays, daher ein Subtyp eines Arrays. Vektoren und Listen werden gemeinsam als Sequenzen bezeichnet. Daher arbeiten alle bisher diskutierten generischen Sequenzfunktionen und Array-Funktionen an Vektoren.

Vektoren erstellen

Mit der Vektorfunktion können Sie Vektoren fester Größe mit bestimmten Werten erstellen. Es akzeptiert eine beliebige Anzahl von Argumenten und gibt einen Vektor zurück, der diese Argumente enthält.

Beispiel 1

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(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)

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

#(1 2 3 4 5)
#(A B C D E)
#(P Q R S T)

Bitte beachten Sie, dass LISP die Syntax # (...) als Literalnotation für Vektoren verwendet. Mit dieser # (...) - Syntax können Sie Literalvektoren erstellen und in Ihren Code aufnehmen.

Dies sind jedoch Literalvektoren, sodass das Ändern dieser Vektoren in LISP nicht definiert ist. Daher sollten Sie für die Programmierung immer die verwendenvector Funktion oder die allgemeinere Funktion make-array um Vektoren zu erstellen, die Sie ändern möchten.

Das make-arrayFunktion ist die allgemeinere Methode zum Erstellen eines Vektors. Sie können auf die Vektorelemente mit dem zugreifenaref Funktion.

Beispiel 2

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(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)

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

#(0 1 2 3 4)
#(2 2 2 2 2)

Zeiger füllen

Das make-array Mit dieser Funktion können Sie einen veränderbaren Vektor erstellen.

Das fill-pointerDas Argument der Funktion verfolgt die Anzahl der tatsächlich im Vektor gespeicherten Elemente. Dies ist der Index der nächsten Position, die gefüllt werden muss, wenn Sie dem Vektor ein Element hinzufügen.

Das vector-pushMit dieser Funktion können Sie ein Element am Ende eines veränderbaren Vektors hinzufügen. Es erhöht den Füllzeiger um 1.

Das vector-pop Die Funktion gibt das zuletzt gepusste Element zurück und dekrementiert den Füllzeiger um 1.

Beispiel

Erstellen Sie eine neue Quellcodedatei mit dem Namen main.lisp und geben Sie den folgenden Code ein.

(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)

Wenn Sie den Code ausführen, wird das folgende Ergebnis zurückgegeben:

#()
#(A B C)
#(A B C D E)
#(A B)

Da Vektoren Sequenzen sind, sind alle Sequenzfunktionen für Vektoren anwendbar. Informationen zu Vektorfunktionen finden Sie im Kapitel Sequenzen.