📜  LISP 中的数据类型

📅  最后修改于: 2022-05-13 01:54:27.641000             🧑  作者: Mango

LISP 中的数据类型

数据类型基本上是具有相同类型的值的集合。我们也可以说,在 lisp 中,每个对象都属于一种数据类型。 lisp 中的对象是由 lisp 代码使用和操作的数据。

LISP 提供了多种数据类型,常用的数据类型有数组、数字、字符串、浮点数、流、向量等。我们可以将这些数据类型分为两类:

  1. 标量类型
  2. 数据结构

标量类型是用于存储单个值的数据类型。标量类型有数字、浮点数、流等。

数据结构是用于存储多个值的数据类型。数据结构有数组、向量等。

在 lisp 中,数据是一组 lisp 对象。一个 lisp 对象可以属于多个数据类型。而如果我们想查找一个对象是否属于某个数据类型,我们可以使用typeep函数。它将检查对象是否属于特定数据类型。

要找出给定对象的数据类型,我们可以使用typeof函数。 typeof函数返回对象的数据类型。

在 lisp 中,一组对象由符号 t 表示,没有对象或空数据类型由 nil 表示。

LISP 中的类型说明符。

类型说明符是 lisp 对象,例如用于标识对象数据类型的名称或符号。在 LISP 中,变量不是类型说明符,因为变量没有类型。以下是我们可以在列表中使用的系统定义类型。

arrayatombignumbit
bit-vectorcharacter[common]compiled-function
complexconsdouble-floatfixnum
floatfunctionhash-tableinteger
keywordlistlong-floatnill
nullnumberpackagepathname
random-stateratiorationalreadtable
sequenceshort-floatsigned-bytesimple-array
simple-bit-vectorsimple-stringsimple-vectorsingle-float
standard-charstreamstring[string-char]
symboltunsigned-bytevector

我们还可以创建自己的自定义用户定义数据类型。为此,我们必须使用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

这里,词向量是向量的类型说明符。单词数组是数组的类型说明符。字位向量是位向量的类型说明符。单词字符串是字符串的类型说明符。