在編程語(yǔ)言的通用術(shù)語(yǔ)中,包是專(zhuān)為提供一種方法來(lái)保持一組名從另一個(gè)分開(kāi)的。在一個(gè)包中聲明的符號(hào)將不會(huì)與另一個(gè)聲明的相同的符號(hào)相沖突。這樣的包減少獨(dú)立的代碼模塊之間的命名沖突。
LISP讀取器會(huì)維護(hù)所有已發(fā)現(xiàn)的符號(hào)表。當(dāng)它找到一個(gè)新的字符序列,它在符號(hào)表中創(chuàng)建一個(gè)新的符號(hào)和存儲(chǔ)。這個(gè)表被稱(chēng)為一個(gè)包。
當(dāng)前包是由特殊變量*package*引用。
有兩個(gè)預(yù)定義的包在LISP:
common-lisp - it包含了所有已定義的函數(shù)和變量符號(hào)。
common-lisp-user - it 采用了common-lisp包和其他所有的包與編輯和調(diào)試工具;它簡(jiǎn)稱(chēng)為cl-user
下表提供了用于創(chuàng)建,使用和操作封裝最常用的功能:
SL No | 函數(shù)和說(shuō)明 |
---|---|
1 |
make-package package-name &key :nicknames :use 它創(chuàng)建并使用指定的包名返回一個(gè)新的包。 |
2 |
in-package package-name &key :nicknames :use 使得當(dāng)前的程序包。 |
3 |
in-package name 這個(gè)宏的原因*package*設(shè)置為名為name的包,它必須是一個(gè)符號(hào)或字符串。 |
4 |
find-package name 它搜索一個(gè)包。返回包的名稱(chēng)或昵稱(chēng);如果沒(méi)有這樣的程序包是否存在,find-package返回nil |
5 |
rename-package package new-name &optional new-nicknames 它重命名一個(gè)包。 |
6 |
list-all-packages 該函數(shù)返回一個(gè)當(dāng)前存在于Lisp語(yǔ)言系統(tǒng)中的所有包的列表。 |
7 |
delete-package package 它會(huì)刪除一個(gè)包 |
defpackage函數(shù)用于創(chuàng)建一個(gè)用戶(hù)定義的程序包。它的語(yǔ)法如下:
defpackage :package-name (:use :common-lisp ...) (:export :symbol1 :symbol2 ...))
那么,
package-name是包的名稱(chēng)。
:use 關(guān)鍵字指定此包需要的包,即定義在此包中使用包的代碼函數(shù)。
:export 關(guān)鍵字指定為外部在這個(gè)包中的符號(hào)。
make-package函數(shù)也可用于創(chuàng)建一個(gè)包。其語(yǔ)法函數(shù):
make-package package-name &key :nicknames :use
參數(shù)和關(guān)鍵字具有相同的含義。
一旦創(chuàng)建了一個(gè)包,則可以使用代碼在這個(gè)包中,使其成為當(dāng)前包。in-package宏使得環(huán)境中的當(dāng)前程序包。
示例
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(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)
當(dāng)執(zhí)行代碼,它返回以下結(jié)果:
Hello! This is Tom's Tutorials Yiibai Hello! This is Dick's Tutorials Yiibai Hello! This is Harry's Tutorials Yiibai
delete-package宏允許刪除一個(gè)包。下面的例子演示了這一點(diǎn):
示例
創(chuàng)建一個(gè)名為main.lisp一個(gè)新的源代碼文件,并在其中輸入如下代碼:
(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) 上一篇:LISP - 常量下一篇:LISP - 宏