LISP - Пакеты
В общем термине языков программирования, пакет предназначен для обеспечения возможности хранить один набор имен отдельно от другого. Символы, объявленные в одном пакете, не будут конфликтовать с такими же символами, объявленными в другом. Таким образом пакеты уменьшают конфликты именования между независимыми модулями кода.
Читатель LISP ведет таблицу всех найденных символов. Когда он находит новую последовательность символов, он создает новый символ и сохраняет его в таблице символов. Эта таблица называется пакетом.
На текущий пакет ссылается специальная переменная * package *.
В LISP есть два предопределенных пакета:
common-lisp - он содержит символы для всех определенных функций и переменных.
common-lisp-user- он использует пакет common-lisp и все другие пакеты с инструментами редактирования и отладки; сокращенно называется cl-user
Функции пакета в LISP
В следующей таблице представлены наиболее часто используемые функции, используемые для создания, использования и управления пакетами.
Sr. No. | Функция и описание |
---|---|
1 | make-package имя-пакета и ключ: псевдонимы: использовать Он создает и возвращает новый пакет с указанным именем пакета. |
2 | in-package имя-пакета и ключ: псевдонимы: использовать Делает пакет текущим. |
3 | in-package имя Этот макрос заставляет * package * быть установленным для пакета с именем name, которое должно быть символом или строкой. |
4 | find-package имя Он ищет пакет. Пакет с таким именем или псевдонимом возвращается; если такого пакета не существует, find-package возвращает nil. |
5 | rename-package пакет новое-имя и необязательные новые-никнеймы он переименовывает пакет. |
6 | list-all-packages Эта функция возвращает список всех пакетов, которые в настоящее время существуют в системе Lisp. |
7 | delete-package пакет Удаляет пакет. |
Создание пакета LISP
В defpackageфункция используется для создания пользовательского пакета. Он имеет следующий синтаксис -
(defpackage :package-name
(:use :common-lisp ...)
(:export :symbol1 :symbol2 ...)
)
Где,
package-name - это имя пакета.
Ключевое слово: use определяет пакеты, которые нужны этому пакету, т. Е. Пакеты, которые определяют функции, используемые кодом в этом пакете.
Ключевое слово: export определяет символы, которые являются внешними в этом пакете.
В make-packageфункция также используется для создания пакета. Синтаксис этой функции -
make-package package-name &key :nicknames :use
Аргументы и ключевые слова имеют то же значение, что и раньше.
Использование пакета
После создания пакета вы можете использовать код из этого пакета, сделав его текущим пакетом. Вin-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")
)
(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)
Когда вы выполняете код, он возвращает следующий результат -
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