LISP-구조

구조는 다양한 종류의 데이터 항목을 결합 할 수있는 사용자 정의 데이터 유형 중 하나입니다.

구조는 레코드를 나타내는 데 사용됩니다. 도서관에서 책을 추적하고 싶다고 가정 해 보겠습니다. 각 책에 대한 다음 속성을 추적 할 수 있습니다.

  • Title
  • Author
  • Subject
  • 도서 ID

구조 정의

그만큼 defstructLISP의 매크로를 사용하면 추상 레코드 구조를 정의 할 수 있습니다. 그만큼defstruct 문은 프로그램에 대해 둘 이상의 멤버가있는 새 데이터 유형을 정의합니다.

형식을 논의하려면 defstruct매크로, Book 구조의 정의를 작성하겠습니다. 우리는 책 구조를 다음과 같이 정의 할 수 있습니다.

(defstruct book 
   title 
   author 
   subject 
   book-id 
)

참고

  • 위의 선언은 4 개의 책 구조를 만듭니다. named components. 따라서 만들어진 모든 책은이 구조의 대상이됩니다.

  • book-title, book-author, book-subject 및 book-book-id라는 4 개의 함수를 정의합니다.이 함수는 하나의 인수, 책 구조를 취하고 책의 제목, 저자, 주제 및 책 ID 필드를 반환합니다. 목적. 이러한 기능을access functions.

  • 심볼 북은 데이터 형이되며 typep 술부.

  • 또한라는 암시 적 함수가 있습니다. book-p, 이는 술어이며 인수가 책이면 참이고 그렇지 않으면 거짓입니다.

  • 명명 된 또 다른 암시 적 함수 make-book 생성됩니다. constructor, 호출되면 액세스 기능과 함께 사용하기에 적합한 4 개의 구성 요소가있는 데이터 구조를 생성합니다.

  • 그만큼 #S syntax 구조를 나타내며이를 사용하여 책의 인스턴스를 읽거나 인쇄 할 수 있습니다.

  • 한 인수의 copy-book이라는 암시 적 함수도 정의됩니다. 책 개체를 가져 와서 첫 번째 책의 복사 본인 다른 책 개체를 만듭니다. 이 기능을copier function.

  • 당신이 사용할 수있는 setf 예를 들어 책의 구성 요소를 변경하려면

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

main.lisp라는 새 소스 코드 파일을 만들고 그 안에 다음 코드를 입력합니다.

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

코드를 실행하면 다음 결과가 반환됩니다.

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