В общем смысле языки программирования, пакет предназначен для обеспечения способа отделить один набор имен от другого. Символы, объявленные в одном пакете, не будут конфликтовать с теми же символами, объявленными в другом. Таким образом, пакеты уменьшают конфликты именования между независимыми модулями кода.
Читатель LISP ведет таблицу всех найденных символов. Когда он находит новую последовательность символов, он создает новый символ и сохраняет его в таблице символов. Эта таблица называется пакетом.
Текущий пакет указывается специальной переменной * package *.
В LISP есть два предопределенных пакета:
-
common-lisp — содержит символы для всех определенных функций и переменных.
-
common-lisp-user — использует пакет common-lisp и все остальные пакеты с инструментами редактирования и отладки; это называется cl-user вкратце
common-lisp — содержит символы для всех определенных функций и переменных.
common-lisp-user — использует пакет common-lisp и все остальные пакеты с инструментами редактирования и отладки; это называется cl-user вкратце
Пакетные функции в LISP
В следующей таблице представлены наиболее часто используемые функции, используемые для создания, использования и управления пакетами.
Sr.No. | Функция и описание |
---|---|
1 |
make-package имя — пакета и ключ: псевдонимы: использовать Он создает и возвращает новый пакет с указанным именем пакета. |
2 |
имя пакета и ключ в пакете : псевдонимы: использовать Делает пакет актуальным. |
3 |
имя в упаковке Этот макрос заставляет * package * быть установленным на имя пакета, которое должно быть символом или строкой. |
4 |
название пакета поиска Он ищет пакет. Пакет с таким именем или псевдонимом возвращается; если такого пакета не существует, find-package возвращает nil. |
5 |
переименовать пакет пакет новое имя и дополнительные новые псевдонимы это переименовывает пакет. |
6 |
список-все-пакеты Эта функция возвращает список всех пакетов, которые в настоящее время существуют в системе Lisp. |
7 |
пакет удаления пакета Удаляет пакет. |
make-package имя — пакета и ключ: псевдонимы: использовать
Он создает и возвращает новый пакет с указанным именем пакета.
имя пакета и ключ в пакете : псевдонимы: использовать
Делает пакет актуальным.
имя в упаковке
Этот макрос заставляет * package * быть установленным на имя пакета, которое должно быть символом или строкой.
название пакета поиска
Он ищет пакет. Пакет с таким именем или псевдонимом возвращается; если такого пакета не существует, find-package возвращает nil.
переименовать пакет пакет новое имя и дополнительные новые псевдонимы
это переименовывает пакет.
список-все-пакеты
Эта функция возвращает список всех пакетов, которые в настоящее время существуют в системе Lisp.
пакет удаления пакета
Удаляет пакет.
Создание пакета LISP
Функция defpackage используется для создания пользовательского пакета. Он имеет следующий синтаксис —
(defpackage :package-name (:use :common-lisp ...) (:export :symbol1 :symbol2 ...) )
Куда,
-
имя-пакета — это имя пакета.
-
Ключевое слово: use указывает пакеты, в которых нуждается этот пакет, то есть пакеты, которые определяют функции, используемые кодом в этом пакете.
-
Ключевое слово: export указывает внешние символы в этом пакете.
имя-пакета — это имя пакета.
Ключевое слово: use указывает пакеты, в которых нуждается этот пакет, то есть пакеты, которые определяют функции, используемые кодом в этом пакете.
Ключевое слово: export указывает внешние символы в этом пакете.
Функция make-package также используется для создания пакета. Синтаксис этой функции —
make-package package-name &key :nicknames :use
Аргументы и ключевые слова имеют то же значение, что и раньше.
Использование пакета
Создав пакет, вы можете использовать код в этом пакете, сделав его текущим пакетом. Макрос в пакете делает пакет текущим в среде.
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(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)
Когда вы выполняете код, он возвращает следующий результат —
Hello! This is Tom's Tutorials Point Hello! This is Dick's Tutorials Point Hello! This is Harry's Tutorials Point
Удаление пакета
Макрос delete-package позволяет вам удалить пакет. Следующий пример демонстрирует это —
пример
Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.
(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)
Когда вы выполняете код, он возвращает следующий результат —