LISP - 软件包(Packages)

LISP - 软件包(Packages) 首页 / LISP入门教程 / LISP - 软件包(Packages)

用编程语言来说,程序包旨在提供一种使一组名称彼此分开的方法,在一个程序包中声明的符号不会与在另一个程序包中声明的相同符号冲突,这样,程序包减少了独立代码模块之间的命名冲突。

当前包由特殊变量* 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

链接:https://www.learnfk.comhttps://www.learnfk.com/lisp/lisp-packages.html

来源:LearnFk无涯教程网

此函数返回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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

白话法律42讲 -〔周甲徳〕

如何做好一场技术演讲 -〔极客时间〕

Web协议详解与抓包实战 -〔陶辉〕

OAuth 2.0实战课 -〔王新栋〕

Selenium自动化测试实战 -〔郭宏志〕

人人都用得上的写作课 -〔涵柏〕

搞定音频技术 -〔冯建元 〕

手把手带你写一个MiniSpring -〔郭屹〕

Rust 语言从入门到实战 -〔唐刚〕

好记忆不如烂笔头。留下您的足迹吧 :)