包
编辑教程包
在编程语言的通用术语中,包是专为提供一种方法来保持一组名从另一个分开的。在一个包中声明的符号将不会与另一个声明的相同的符号相冲突。这样的包减少独立的代码模块之间的命名冲突。
LISP读取器会维护所有已发现的符号表。当它找到一个新的字符序列,它在符号表中创建一个新的符号和存储。这个表被称为一个包。
当前包是由特殊变量*package*引用。
有两个预定义的包在LISP:
common-lisp - it包含了所有已定义的函数和变量符号。
common-lisp-user - it 采用了common-lisp包和其他所有的包与编辑和调试工具;它简称为cl-user
LISP包函数
下表提供了用于创建,使用和操作封装最常用的功能:
SL 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 name | 它搜索一个包。返回包的名称或昵称;如果没有这样的程序包是否存在,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 Tutorials Yiibai")
)
(hello)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Yiibai")
)
(hello)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Yiibai")
)
(hello)
(in-package tom)
(hello)
(in-package dick)
(hello)
(in-package harry)
(hello)
当执行代码,它返回以下结果:
Hello! This is Tom's Tutorials Yiibai
Hello! This is Dick's Tutorials Yiibai
Hello! This is Harry's Tutorials Yiibai
删除包
delete-package宏允许删除一个包。下面的例子演示了这一点:
示例
创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:
(adsbygoogle = window.adsbygoogle || []).push({});
(adsbygoogle = window.adsbygoogle || []).push({});
(make-package :tom)
(make-package :dick)
(make-package :harry)
(in-package tom)
(defun hello ()
(write-line "Hello! This is Tom's Tutorials Yiibai")
)
(in-package dick)
(defun hello ()
(write-line "Hello! This is Dick's Tutorials Yiibai")
)
(in-package harry)
(defun hello ()
(write-line "Hello! This is Harry's Tutorials Yiibai")
)
(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 Yiibai
Hello! This is Dick's Tutorials Yiibai
Hello! This is Harry's Tutorials Yiibai
*** - EVAL: variable TOM has no value
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟