首页 > 其他分享 >无涯教程-LISP - 软件包(Packages)

无涯教程-LISP - 软件包(Packages)

时间:2024-01-14 14:31:31浏览次数:40  
标签:package LISP Point 无涯 Hello 软件包 Packages Learnfk hello

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

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

相关文章

  • 无涯教程-LISP - 文件I/O
    在本章中,我们将了解LISP如何创建,打开,关闭文本或二进制文件进行数据存储。打开文件您可以使用open函数来创建新文件或打开现有文件,with-open-file通常更方便,更常用,这将在本节的后面看到。打开文件后,将在LISP环境中构造一个流对象来表示它。open函数的语法是-openfilename......
  • 无涯教程-LISP - 输入&输出
    常见的LISP提供许多输入输出函数,我们已经使用了格式化函数和打印函数进行输出,在本节中,我们将研究LISP中提供的一些最常用的输入输出函数。Read函数下表提供了LISP最常用的输入函数-Sr.No.Function&描述1read&optionalinput-streameof-error-peof-valuerecursive-p......
  • 无涯教程-LISP - 集合(Set)
    adjoin函数首先在给定列表中查找该元素(如果找到),然后返回原始列表,否则,它将创建一个新的cons单元格,其car作为元素,而cdr指向原始列表,并返回此新列表。adjoin函数还使用:key和:test关键字参数。adjoin函数不会修改原始列表,因此要更改列表本身,您必须将adjoin返回的值分......
  • 无涯教程-LISP - 数字(Numbers)
    CommonLisp number数据类型包括LISP支持的各种数字。LISP支持的数字类型是-IntegerRatiosFloatComplex下图显示了LISP中可用的数字层次结构和各种数字数据类型-数字类型下表描述了LISP中可用的各种数字类型数据-Sr.No.Datatype&描述1fixnum此数据类型表示......
  • 无涯教程-LISP - 函数声明
    函数是一起执行任务的一组语句。定义函数名为defun的宏用于定义函数,defun宏需要三个参数-函数名称函数参数函数主体defun的语法是-(defunname(parameter-list)"Optionaldocumentationstring."body)让我们用简单的示例来说明这个概念。函数-示例1让我们编写......
  • 无涯教程-LISP - 循环语句
    在某些情况下,您需要执行一段代码次数,循环语句使我们可以多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式。LISP提供以下类型的构造来处理循环需求。单击以下链接以查看其详细信息。Sr.No.Construct&描述1loop以最简单的形式,它允许您重复执行某些语......
  • 无涯教程-LISP - 条件判断
    以下是大多数编程语言中常见的典型决策结构的一般形式-LISP提供以下类型的决策构造,单击以下链接以查看其详细信息。Sr.No.Construct&描述1cond此构造用于检查多个判断操作子句。2ifif构造具有多种形式。3when如果test子句的判断输出为true,则执行test操作,否则,对后......
  • 无涯教程-LISP - 运算符
    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。LISP允许对数据进行大量操作,并由各种函数,宏和其他构造支持。允许对数据进行的操作可以归类为-算术运算比较操作逻辑运算按位运行算术运算下表显示了LISP支持的所有算术运算符。假设变量A=10,变量B=20,然后-运算符......
  • 无涯教程-LISP - 常量声明
    在LISP中,常量是在程序执行期间永不更改其值的变量,常量使用defconstant构造进行声明。以下示例显示了声明全局常量PI并随后在名为area-circle的函数中使用此值来计算圆的面积的情况。defun构造用于定义一个函数,我们将在Function一章中对其进行研究。创建一个名为main.l......
  • 无涯教程-LISP - 宏(Macros)
    宏允许您扩展标准LISP的语法。定义宏在LISP中,使用另一个名为defmacro的宏定义了一个命名宏,定义宏的语法为-(defmacromacro-name(parameter-list))"Optionaldocumentationstring."body-form宏定义由宏的名称,参数列表,可选的文档字符串和Lisp表达式主体组成。让我们编写......