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)