Lisp - 数据类型



在 LISP 中,变量没有类型,但数据对象有。

LISP 数据类型可以分为以下几类。

  • 标量类型 - 例如,数字类型、字符、符号等。

  • 数据结构 - 例如,列表、向量、位向量和字符串。

任何变量都可以取任何 LISP 对象作为其值,除非您已明确声明。

虽然不需要为 LISP 变量指定数据类型,但在某些循环扩展、方法声明和其他一些我们将在后续章节中讨论的情况下,它会有所帮助。

数据类型按层次结构排列。数据类型是一组 LISP 对象,许多对象可能属于一个这样的集合。

typep 谓词用于查找对象是否属于特定类型。

type-of 函数返回给定对象的类型。

LISP 中的类型说明符

类型说明符是系统定义的用于数据类型的符号。

数组 定点数 简单字符串
原子 浮点数 路径名 简单向量
大数 函数 随机状态 单精度浮点数
哈希表 有理数 标准字符
位向量 整数 有理数
字符 关键字 读表 字符串
[通用] 列表 序列 [字符串字符]
编译函数 长浮点数 短浮点数 符号
复数 空列表 带符号字节
构造函数 空列表 简单数组 无符号字节
双精度浮点数 数字 简单位向量 向量

除了这些系统定义的类型之外,您还可以创建自己的数据类型。当使用defstruct函数定义结构类型时,结构类型的名称将成为一个有效的类型符号。

示例 - 使用标量数据类型

创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。

main.lisp

; set values to variables
(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)

; print values of variables
(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)

输出

当您单击“执行”按钮或键入 Ctrl+E 时,LISP 会立即执行它,并返回以下结果:-

10 
34.567 
123.78 
NIL 
110000.0 
62

示例 - 检查变量的类型

接下来,让我们检查上一个示例中使用的变量的类型。创建一个名为 main.lisp 的新源代码文件,并在其中键入以下代码。

main.lisp

; define variables and set values
(defvar x 10)
(defvar y 34.567)
(defvar ch nil)
(defvar n 123.78)
(defvar bg 11.0e+4)
(defvar r 124/2)

; print type of all variables
(print (type-of x))
(print (type-of y))
(print (type-of n))
(print (type-of ch))
(print (type-of bg))
(print (type-of r))

输出

当您单击“执行”按钮或键入 Ctrl+E 时,LISP 会立即执行它,并返回以下结果:-

(INTEGER 0 281474976710655) 
SINGLE-FLOAT 
SINGLE-FLOAT 
NULL 
SINGLE-FLOAT 
(INTEGER 0 281474976710655)
广告