鍍金池/ 教程/ Java/ LISP - 包
LISP - 樹(shù)
LISP - 錯(cuò)誤處理
LISP - 謂詞
LISP - 決策
LISP - 變量
LISP - 數(shù)組
LISP - 對(duì)象系統(tǒng)(CLOS)
LISP - 輸入和輸出
Lisp教程
LISP - 數(shù)字
LISP - 循環(huán)
LISP - 常量
LISP - 集合
LISP - 字符
LISP - 程序結(jié)構(gòu)
LISP - 文件I/O
LISP - 哈希表
LISP - 宏
LISP - 數(shù)據(jù)類(lèi)型
LISP - 包
LISP - 符號(hào)
LISP - 運(yùn)算符
LISP - 基本語(yǔ)法
LISP - 函數(shù)
LISP - 向量
LISP - 結(jié)構(gòu)
LISP - 概述介紹

LISP - 包

在編程語(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

LISP包函數(shù)

下表提供了用于創(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è)包

創(chuàng)建一個(gè)LISP包

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 - 宏