LISP - Yapılar

Yapılar, farklı türlerdeki veri öğelerini birleştirmenize olanak tanıyan kullanıcı tanımlı veri türlerinden biridir.

Yapılar bir kaydı temsil etmek için kullanılır. Kitaplarınızı bir kütüphanede takip etmek istediğinizi varsayalım. Her kitapla ilgili aşağıdaki öznitelikleri izlemek isteyebilirsiniz -

  • Title
  • Author
  • Subject
  • Kitap kimliği

Bir Yapının Tanımlanması

defstructLISP'deki makro, soyut bir kayıt yapısı tanımlamanıza izin verir. defstruct ifadesi, programınız için birden fazla üye içeren yeni bir veri türünü tanımlar.

Formatını tartışmak için defstructmakrosu, Kitap yapısının tanımını yazalım. Kitap yapısını şu şekilde tanımlayabiliriz:

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

lütfen aklınızda bulundurun

  • Yukarıdaki beyan, dörtlü bir kitap yapısı oluşturur. named components. Yani yaratılan her kitap bu yapının bir nesnesi olacak.

  • Kitap-başlığı, kitap-yazarı, kitap-konu ve kitap-kitap-kimliği adlı dört işlevi tanımlar; bunlar bir bağımsız değişken, bir kitap yapısı alır ve kitabın başlığını, yazarını, konusunu ve kitap kimliğini döndürür. nesne. Bu işlevlereaccess functions.

  • Sembol kitabı bir veri türü haline gelir ve bunu kullanarak kontrol edebilirsiniz. typep yüklem.

  • Ayrıca adında örtük bir işlev de olacaktır book-p, bu bir yüklemdir ve argümanı bir kitapsa ve aksi takdirde yanlışsa doğru olacaktır.

  • Adlı başka bir örtük işlev make-book bir constructor, bu, çağrıldığında, erişim işlevleriyle kullanıma uygun dört bileşenli bir veri yapısı oluşturacaktır.

  • #S syntax bir yapıyı ifade eder ve bunu bir kitabın örneklerini okumak veya yazdırmak için kullanabilirsiniz.

  • Bir bağımsız değişkenin kopya kitabı adlı örtük bir işlev de bu şekilde tanımlanır. Bir kitap nesnesini alır ve ilkinin bir kopyası olan başka bir kitap nesnesi oluşturur. Bu fonksiyonacopier function.

  • Kullanabilirsiniz setf örneğin bir kitabın bileşenlerini değiştirmek

(setf (book-book-id book3) 100)

Misal

Main.lisp adlı yeni bir kaynak kod dosyası oluşturun ve içine aşağıdaki kodu yazın.

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

Kodu çalıştırdığınızda, aşağıdaki sonucu döndürür -

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