用编程语言来说,程序包旨在提供一种使一组名称彼此分开的方法,在一个程序包中声明的符号不会与在另一个程序包中声明的相同符号冲突,这样,程序包减少了独立代码模块之间的命名冲突。
当前包由特殊变量* package *引用。
LISP中有两个预定义的程序包-
common-lisp - 它包含所有已定义函数和变量的符号。
common-lisp-user - 它使用common-lisp软件包以及所有其他带有编辑和调试工具的软件包;简称为cl-user
封装函数
下表提供了用于创建,使用和操作程序包的最常用函数-
Sr.No. | 函数 & 描述 |
---|---|
1 |
make-package package-name &key :nicknames :use 它创建并返回具有指定包名称的新包。 |
2 |
in-package package-name &key :nicknames :use 使软件包为最新。 |
3 |
in-package name 此宏将* package *设置为名为name的软件包,该软件包必须是符号或字符串。 |
4 |
find-package 它搜索一个包。返回具有该名称或昵称的程序包;如果不存在这样的包,则find-package返回nil。 |
5 |
rename-package package new-name &optional new-nicknames 它重命名一个包。 |
6 |
list-all-packages 此函数返回Lisp系统中当前存在的所有软件包的列表。 |
7 |
delete-package 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 Learnfk Point") ) (hello) (in-package dick) (defun hello () (write-line "Hello! This is Dick's Learnfk Point") ) (hello) (in-package harry) (defun hello () (write-line "Hello! This is Harry's Learnfk Point") ) (hello) (in-package tom) (hello) (in-package dick) (hello) (in-package harry) (hello)
当您执行代码时,它返回以下输出-
Hello! This is Tom's Learnfk Point Hello! This is Dick's Learnfk Point Hello! This is Harry's Learnfk 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 Learnfk Point") ) (in-package dick) (defun hello () (write-line "Hello! This is Dick's Learnfk Point") ) (in-package harry) (defun hello () (write-line "Hello! This is Harry's Learnfk 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 Learnfk Point Hello! This is Dick's Learnfk Point Hello! This is Harry's Learnfk Point *** - EVAL: variable TOM has no value
参考链接
https://www.learnfk.com/lisp/lisp-packages.html
标签:package,LISP,Point,无涯,Hello,软件包,Packages,Learnfk,hello From: https://blog.51cto.com/u_14033984/9240576