LISP - Gói

Theo thuật ngữ chung của các ngôn ngữ lập trình, một gói được thiết kế để cung cấp một cách để giữ một bộ tên riêng biệt với một bộ tên khác. Các ký hiệu được khai báo trong một gói sẽ không xung đột với các ký hiệu tương tự được khai báo trong gói khác. Bằng cách này, các gói làm giảm xung đột đặt tên giữa các mô-đun mã độc lập.

Trình đọc LISP duy trì một bảng gồm tất cả các ký hiệu mà nó đã tìm thấy. Khi tìm thấy một chuỗi ký tự mới, nó sẽ tạo một ký hiệu mới và lưu trữ trong bảng ký hiệu. Bảng này được gọi là một gói.

Gói hiện tại được tham chiếu bởi biến đặc biệt * gói *.

Có hai gói được xác định trước trong LISP -

  • common-lisp - nó chứa các ký hiệu cho tất cả các hàm và biến được định nghĩa.

  • common-lisp-user- nó sử dụng gói common-lisp và tất cả các gói khác với các công cụ chỉnh sửa và gỡ lỗi; nó được gọi ngắn gọn là cl-user

Gói chức năng trong LISP

Bảng sau cung cấp các hàm thường được sử dụng nhất được sử dụng để tạo, sử dụng và thao tác các gói:

Sr.No. Chức năng và Mô tả
1

make-package package-name & key: nicknames: use

Nó tạo và trả về một gói mới với tên gói được chỉ định.

2

in-package package-name & key: nicknames: use

Làm cho gói hiện tại.

3

in-package Tên

Macro này làm cho * gói * được đặt thành tên gói có tên, phải là một ký hiệu hoặc chuỗi.

4

find-package Tên

Nó tìm kiếm một gói. Gói có tên hoặc biệt hiệu đó được trả lại; nếu không có gói nào như vậy tồn tại, gói tìm kiếm trả về nil.

5

rename-package gói tên mới & biệt hiệu mới tùy chọn

nó đổi tên một gói.

6

list-all-packages

Hàm này trả về danh sách tất cả các gói hiện đang tồn tại trong hệ thống Lisp.

7

delete-package gói hàng

Nó xóa một gói.

Tạo một gói LISP

Các defpackageđược sử dụng để tạo một gói do người dùng xác định. Nó có cú pháp sau:

(defpackage :package-name
   (:use :common-lisp ...)
   (:export :symbol1 :symbol2 ...)
)

Ở đâu,

  • package-name là tên của gói.

  • Từ khóa: use chỉ định các gói mà gói này cần, tức là các gói xác định các chức năng được sử dụng bởi mã trong gói này.

  • Từ khóa: export chỉ định các ký hiệu bên ngoài trong gói này.

Các make-packagecũng được sử dụng để tạo một gói. Cú pháp của hàm này là:

make-package package-name &key :nicknames :use

Các đối số và từ khóa có cùng ý nghĩa như trước.

Sử dụng một gói

Khi bạn đã tạo một gói, bạn có thể sử dụng mã trong gói này, bằng cách đặt nó thành gói hiện tại. Cácin-package macro làm cho một gói hiện hành trong môi trường.

Thí dụ

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

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Tutorials Point")
)

(hello)
(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Tutorials Point")
)

(hello)
(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Tutorials Point")
)

(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)

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

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point

Xóa một gói

Các delete-packagemacro cho phép bạn xóa một gói. Ví dụ sau đây chứng minh điều này -

Thí dụ

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

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's Tutorials Point")
)

(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's Tutorials Point")
)

(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's Tutorials Point")
)

(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)

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

Hello! This is Tom's Tutorials Point
Hello! This is Dick's Tutorials Point
Hello! This is Harry's Tutorials Point
*** - EVAL: variable TOM has no value