目录

LISP - 包裹(Packages)

在编程语言的一般术语中,包被设计用于提供使一组名称与另一组名称分离的方式。 在一个包中声明的符号不会与在另一个包中声明的相同符号冲突。 这样,包减少了独立代码模块之间的命名冲突。

LISP阅读器维护一个包含所有符号的表格。 当它找到新的字符序列时,它会创建一个新符号并存储在符号表中。 该表称为包。

当前包由特殊变量* package *引用。

LISP中有两个预定义的包 -

  • common-lisp - 它包含所有定义的函数和变量的符号。

  • common-lisp-user - 它使用common-lisp包和所有其他包以及编辑和调试工具; 它简称为cl-user

LISP中的包功能

下表提供了用于创建,使用和操作包的最常用函数 -

Sr.No. 功能和描述
1

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

它创建并返回具有指定包名称的新包。

2

in-package package-name和密钥:昵称:使用

使包最新。

3

in-package name

此宏导致* package *设置为名为name的包,该包必须是符号或字符串。

4

find-package name

它搜索一个包。 返回包含该名称或昵称的包; 如果不存在这样的包,则find-package返回nil。

5

rename-package package new-name和可选的new-nicknames

它重命名一个包。

6

list-all-packages

此函数返回Lisp系统中当前存在的所有包的列表。

7

delete-package package

它删除了一个包。

创建LISP包

defpackage函数用于创建用户定义的包。 它具有以下语法 -

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

Where,

  • package-name是包的名称。

  • :use关键字指定此程序包所需的程序包,即定义此程序包中代码使用的函数的程序包。

  • :export关键字指定此包中的外部符号。

make-package函数也用于创建包。 这个函数的语法是 -

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

参数和关键字具有与以前相同的含义。

使用包

创建包后,可以使用此包中的代码,方法是将其作为当前包。 in-package宏使封装在环境中最新。

例子 (Example)

创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。

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

执行代码时,它返回以下结果 -

Hello! This is Tom's IOWIKI
Hello! This is Dick's IOWIKI
Hello! This is Harry's IOWIKI

删除包

delete-package宏允许您删除包。 以下示例演示了这一点 -

例子 (Example)

创建一个名为main.lisp的新源代码文件,并在其中键入以下代码。

(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello () 
   (write-line "Hello! This is Tom's IOWIKI")
)
(in-package dick)
(defun hello () 
   (write-line "Hello! This is Dick's IOWIKI")
)
(in-package harry)
(defun hello () 
   (write-line "Hello! This is Harry's IOWIKI")
)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
(delete-package tom)
(in-package tom)
(hello)

执行代码时,它返回以下结果 -

Hello! This is Tom's IOWIKI
Hello! This is Dick's IOWIKI
Hello! This is Harry's IOWIKI
*** - EVAL: variable TOM has no value
↑回到顶部↑
WIKI教程 @2018