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)