LISP - 数据类型

在 LISP 中,变量不是类型化的,而是数据对象。

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

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

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

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

尽管没有必要为 LISP 变量指定数据类型,但是,它有助于某些循环扩展、方法声明以及我们将在后面的章节中讨论的其他一些情况。

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

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

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

LISP 中的类型说明符

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

array fixnum package simple-string
atom float pathname simple-vector
bignum function random-state single-float
bit hash-table ratio standard-char
bit-vector integer rational stream
character keyword readtable string
[common] list sequence [string-char]
compiled-function long-float short-float symbol
complex nill signed-byte t
cons null simple-array unsigned-byte
double-float number simple-bit-vector vector

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

示例 1

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

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

(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)

当你点击执行按钮,或者输入Ctrl+E,LISP立即执行,返回结果为 −

10 
34.567 
123.78 
NIL 
110000.0 
62

示例 2

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

(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 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)