Учебники

ЛИСП — Пакеты

В общем смысле языки программирования, пакет предназначен для обеспечения способа отделить один набор имен от другого. Символы, объявленные в одном пакете, не будут конфликтовать с теми же символами, объявленными в другом. Таким образом, пакеты уменьшают конфликты именования между независимыми модулями кода.

Читатель 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 и введите в него следующий код.

Live Demo

(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 и введите в него следующий код.

Live Demo

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

Когда вы выполняете код, он возвращает следующий результат —