LISP - Vektor

Vektor adalah larik satu dimensi, oleh karena itu merupakan subtipe larik. Vektor dan daftar secara kolektif disebut urutan. Oleh karena itu semua fungsi generik urutan dan fungsi array yang telah kita bahas sejauh ini, bekerja pada vektor.

Membuat Vektor

Fungsi vektor memungkinkan Anda membuat vektor berukuran tetap dengan nilai tertentu. Dibutuhkan sejumlah argumen dan mengembalikan vektor yang berisi argumen tersebut.

Contoh 1

Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.

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

Saat Anda menjalankan kode, ia mengembalikan hasil berikut -

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

Harap dicatat bahwa LISP menggunakan sintaks # (...) sebagai notasi literal untuk vektor. Anda dapat menggunakan sintaks # (...) ini untuk membuat dan menyertakan vektor literal dalam kode Anda.

Namun, ini adalah vektor literal, jadi mengubahnya tidak didefinisikan di LISP. Oleh karena itu, untuk pemrograman, Anda harus selalu menggunakanvector fungsi, atau fungsi yang lebih umum make-array untuk membuat vektor yang ingin Anda modifikasi.

Itu make-arrayfungsi adalah cara yang lebih umum untuk membuat vektor. Anda dapat mengakses elemen vektor menggunakanaref fungsi.

Contoh 2

Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.

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

Saat Anda menjalankan kode, ia mengembalikan hasil berikut -

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

Isi Pointer

Itu make-array fungsi memungkinkan Anda membuat vektor yang dapat diubah ukurannya.

Itu fill-pointerargumen fungsi melacak jumlah elemen yang sebenarnya disimpan dalam vektor. Ini adalah indeks dari posisi berikutnya yang harus diisi saat Anda menambahkan elemen ke vektor.

Itu vector-pushfunction memungkinkan Anda menambahkan elemen ke akhir vektor yang dapat diubah ukurannya. Ini meningkatkan penunjuk pengisian sebesar 1.

Itu vector-pop function mengembalikan item yang baru-baru ini didorong dan mengurangi penunjuk isian sebesar 1.

Contoh

Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.

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

Saat Anda menjalankan kode, ia mengembalikan hasil berikut -

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

Vektor adalah urutan, semua fungsi urutan dapat diterapkan untuk vektor. Silakan baca bab urutan, untuk fungsi vektor.