LISP - Ký hiệu

Trong LISP, một biểu tượng là tên đại diện cho các đối tượng dữ liệu và điều thú vị là nó cũng là một đối tượng dữ liệu.

Điều làm cho các biểu tượng trở nên đặc biệt là chúng có một thành phần được gọi là property list, hoặc là plist.

Danh sách tài sản

LISP cho phép bạn gán thuộc tính cho các biểu tượng. Ví dụ, chúng ta có một đối tượng 'người'. Chúng tôi muốn đối tượng 'person' này có các thuộc tính như tên, giới tính, chiều cao, cân nặng, địa chỉ, nghề nghiệp, v.v. Một thuộc tính giống như tên thuộc tính.

Danh sách thuộc tính được triển khai dưới dạng danh sách có số phần tử chẵn (có thể bằng không). Mỗi cặp phần tử trong danh sách tạo thành một mục nhập; mục đầu tiên làindicator, và thứ hai là value.

Khi một biểu tượng được tạo, danh sách thuộc tính của nó lúc đầu trống. Thuộc tính được tạo bằng cách sử dụngget trong một setf hình thức.

Ví dụ: các câu lệnh sau đây cho phép chúng tôi gán tên thuộc tính, tác giả và nhà xuất bản và các giá trị tương ứng cho một đối tượng có tên (ký hiệu) 'book'.

ví dụ 1

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(write (setf (get 'books'title) '(Gone with the Wind)))
(terpri)
(write (setf (get 'books 'author) '(Margaret Michel)))
(terpri)
(write (setf (get 'books 'publisher) '(Warner Books)))

Khi bạn thực thi mã, nó trả về kết quả sau:

(GONE WITH THE WIND)
(MARGARET MICHEL)
(WARNER BOOKS)

Các chức năng danh sách thuộc tính khác nhau cho phép bạn gán thuộc tính cũng như truy xuất, thay thế hoặc loại bỏ các thuộc tính của một biểu tượng.

Các gethàm trả về danh sách thuộc tính của biểu tượng cho một chỉ số nhất định. Nó có cú pháp sau:

get symbol indicator &optional default

Các gethàm tìm kiếm danh sách thuộc tính của ký hiệu đã cho cho chỉ số được chỉ định, nếu được tìm thấy thì nó trả về giá trị tương ứng; nếu không thì mặc định được trả về (hoặc nil, nếu giá trị mặc định không được chỉ định).

Ví dụ 2

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(setf (get 'books 'title) '(Gone with the Wind))
(setf (get 'books 'author) '(Margaret Micheal))
(setf (get 'books 'publisher) '(Warner Books))

(write (get 'books 'title))
(terpri)
(write (get 'books 'author))
(terpri)
(write (get 'books 'publisher))

Khi bạn thực thi mã, nó trả về kết quả sau:

(GONE WITH THE WIND)
(MARGARET MICHEAL)
(WARNER BOOKS)

Các symbol-plist hàm cho phép bạn xem tất cả các thuộc tính của một biểu tượng.

Ví dụ 3

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))

Khi bạn thực thi mã, nó trả về kết quả sau:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)

Các remprop hàm xóa thuộc tính được chỉ định khỏi một biểu tượng.

Ví dụ 4

Tạo một tệp mã nguồn mới có tên main.lisp và nhập mã sau vào đó.

(setf (get 'annie 'age) 43)
(setf (get 'annie 'job) 'accountant)
(setf (get 'annie 'sex) 'female)
(setf (get 'annie 'children) 3)

(terpri)
(write (symbol-plist 'annie))
(remprop 'annie 'age)
(terpri)
(write (symbol-plist 'annie))

Khi bạn thực thi mã, nó trả về kết quả sau:

(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT AGE 43)
(CHILDREN 3 SEX FEMALE JOB ACCOUNTANT)