LISP 中的数据类型
数据类型基本上是具有相同类型的值的集合。我们也可以说,在 lisp 中,每个对象都属于一种数据类型。 lisp 中的对象是由 lisp 代码使用和操作的数据。
LISP 提供了多种数据类型,常用的数据类型有数组、数字、字符串、浮点数、流、向量等。我们可以将这些数据类型分为两类:
- 标量类型
- 数据结构
标量类型是用于存储单个值的数据类型。标量类型有数字、浮点数、流等。
数据结构是用于存储多个值的数据类型。数据结构有数组、向量等。
在 lisp 中,数据是一组 lisp 对象。一个 lisp 对象可以属于多个数据类型。而如果我们想查找一个对象是否属于某个数据类型,我们可以使用typeep函数。它将检查对象是否属于特定数据类型。
要找出给定对象的数据类型,我们可以使用typeof函数。 typeof函数返回对象的数据类型。
在 lisp 中,一组对象由符号 t 表示,没有对象或空数据类型由 nil 表示。
LISP 中的类型说明符。
类型说明符是 lisp 对象,例如用于标识对象数据类型的名称或符号。在 LISP 中,变量不是类型说明符,因为变量没有类型。以下是我们可以在列表中使用的系统定义类型。array atom bignum bit bit-vector character [common] compiled-function complex cons double-float fixnum float function hash-table integer keyword list long-float nill null number package pathname random-state ratio rational readtable sequence short-float signed-byte simple-array simple-bit-vector simple-string simple-vector single-float standard-char stream string [string-char] symbol t unsigned-byte vector
我们还可以创建自己的自定义用户定义数据类型。为此,我们必须使用defstruct函数。使用defstruct定义的符号成为有效符号。
下面我们来了解一下 LISP 中一些常用的数据类型。下面是数据类型及其对应的类型说明符。
1. 数字:数字用于存储整数和浮点值。数字由符号编号表示。 Lisp 有两种类型的数字:整数和浮点数。浮点数是带小数点的数字。整数是没有小数点的整数。 Lisp 还提供笛卡尔复数。
例子:
Lisp
;; Numbers in LISP
(setq a 1) ;; a is a number
(setq b 2.0) ;; b is a floating point number
(setq c 4.0e2) ;; c is a floating point number
(setq d (complex 1 2)) ;; d is a complex number
(print "a is " a) ;; a is 1
(print "b is " b) ;; b is 2.0
(print "c is " c) ;; c is 400.0
(print "d is " d) ;; d is (1.0+2.0i)
Lisp
;; characters in LISP
(setq a ?c) ;; a is a character
(setq b "GeeksforGeeks") ;; b is a string
(print "a is " a) ;; a is c
(print "b is " b) ;; b is GeeksforGeeks
Lisp
;; Arrays in LISP
(setq a (array 1 2 3 4 5)) ;; a is an array
(setq v (vector 1 2 3 4 5)) ;; v is a vector
(setq b (bitvector 0 1 0 1 1)) ;; b is a bit vector
(setq s (string "Geeks")) ;; s is a string
(print "a is " a) ;; a is [1 2 3 4 5]
(print "v is " v) ;; v is [1 2 3 4 5]
(print "b is " b) ;; b is [0 1 0 1 1]
(print "s is " s) ;; s is Geeks
输出:
a is 1
b is 2.0
c is 400.0
d is (1.0+2.0i)
在这里,complex 是复数的类型说明符。
2.字符:字符用于存储单个字符值。字符可以用来表示单个字符。而一组一个或多个字符可以用一个字符串来表示。字符串是一个字符序列,它是一个一维字符数组。
例子:
语言
;; characters in LISP
(setq a ?c) ;; a is a character
(setq b "GeeksforGeeks") ;; b is a string
(print "a is " a) ;; a is c
(print "b is " b) ;; b is GeeksforGeeks
输出:
a is c
b is GeeksforGeeks
3. 数组:数组用于存储多个值。数组是 lisp 中对象的集合。数组可以用整数索引。这意味着可以使用数组的索引来访问数组。但是数组必须具有非负数的维数。向量也称为一维数组。 A 可以存储任何类型的数据。字符串被称为字符的一维数组。位向量也称为一维位数组。位向量只存储 0 或 1。
例子:
语言
;; Arrays in LISP
(setq a (array 1 2 3 4 5)) ;; a is an array
(setq v (vector 1 2 3 4 5)) ;; v is a vector
(setq b (bitvector 0 1 0 1 1)) ;; b is a bit vector
(setq s (string "Geeks")) ;; s is a string
(print "a is " a) ;; a is [1 2 3 4 5]
(print "v is " v) ;; v is [1 2 3 4 5]
(print "b is " b) ;; b is [0 1 0 1 1]
(print "s is " s) ;; s is Geeks
输出:
a is [1 2 3 4 5]
v is [1 2 3 4 5]
b is [0 1 0 1 1]
s is Geeks
这里,词向量是向量的类型说明符。单词数组是数组的类型说明符。字位向量是位向量的类型说明符。单词字符串是字符串的类型说明符。