LISP - Struktur
Struktur adalah salah satu tipe data yang ditentukan pengguna, yang memungkinkan Anda menggabungkan item data dari berbagai jenis.
Struktur digunakan untuk merepresentasikan record. Misalkan Anda ingin melacak buku Anda di perpustakaan. Anda mungkin ingin melacak atribut berikut tentang setiap buku -
- Title
- Author
- Subject
- ID Buku
Mendefinisikan Struktur
Itu defstructmakro di LISP memungkinkan Anda untuk menentukan struktur rekaman abstrak. Itudefstruct pernyataan mendefinisikan tipe data baru, dengan lebih dari satu anggota untuk program Anda.
Untuk membahas format file defstructmakro, mari kita tulis definisi struktur Buku. Kita dapat mendefinisikan struktur buku sebagai -
(defstruct book
title
author
subject
book-id
)
Tolong dicatat
Deklarasi di atas menciptakan struktur buku dengan empat named components. Jadi setiap buku yang dibuat akan menjadi objek struktur ini.
Ini mendefinisikan empat fungsi bernama judul-buku, penulis-buku, subjek-buku dan id-buku-buku, yang akan mengambil satu argumen, struktur buku, dan akan mengembalikan judul bidang, penulis, subjek dan id-buku dari buku tersebut obyek. Fungsi ini disebutaccess functions.
Buku simbol menjadi tipe data dan Anda dapat memeriksanya menggunakan typep predikat.
Juga akan ada fungsi implisit bernama book-p, yang merupakan predikat dan akan benar jika argumennya sebuah buku dan salah sebaliknya.
Fungsi implisit lain bernama make-book akan dibuat, yaitu a constructor, yang, jika dipanggil, akan membuat struktur data dengan empat komponen, cocok untuk digunakan dengan fungsi akses.
Itu #S syntax mengacu pada struktur, dan Anda dapat menggunakannya untuk membaca atau mencetak contoh dari sebuah buku.
Fungsi implisit bernama copy-book dari satu argumen juga didefinisikan itu. Dibutuhkan objek buku dan membuat objek buku lain, yang merupakan salinan dari yang pertama. Fungsi ini disebutcopier function.
Kamu dapat memakai setf untuk mengubah komponen sebuah buku, misalnya
(setf (book-book-id book3) 100)
Contoh
Buat file kode sumber baru bernama main.lisp dan ketikkan kode berikut di dalamnya.
(defstruct book
title
author
subject
book-id
)
( setq book1 (make-book :title "C Programming"
:author "Nuha Ali"
:subject "C-Programming Tutorial"
:book-id "478")
)
( setq book2 (make-book :title "Telecom Billing"
:author "Zara Ali"
:subject "C-Programming Tutorial"
:book-id "501")
)
(write book1)
(terpri)
(write book2)
(setq book3( copy-book book1))
(setf (book-book-id book3) 100)
(terpri)
(write book3)
Saat Anda menjalankan kode, ia mengembalikan hasil berikut -
#S(BOOK :TITLE "C Programming" :AUTHOR "Nuha Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID "478")
#S(BOOK :TITLE "Telecom Billing" :AUTHOR "Zara Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID "501")
#S(BOOK :TITLE "C Programming" :AUTHOR "Nuha Ali" :SUBJECT "C-Programming Tutorial" :BOOK-ID 100)