计算机内由许多编了码的内存单元组成。
一个特定的内存单元的编号称为内存地址。
内存单元的内容可以是可以是数字也可以是另一个内存单元的地址。
内容是另一个内存单元的地址的内存单元被称为指向另一个内存单元的指针。
如果一个内存单元分为左右两部分,分别存放两个内存单元的地址,那么这个内存单元就有左右两个指针。
具有左右两个指针的内存单元称为结点。每个节点长度是12个字节,等分为左右两部分,作为左右指针,每个节点都有它的地址。AutoLISP通过这样的一些结点构成链表,以链表的方式存储各种数据。
1.符号
创建一个符号(符号的定义见第二节 变量)至少需要三个结点。一个结点链接到符号原子表的链尾并指向防止符号名的结点,一个结点存放符号名和存放符号值的指针,最后一个结点存符号的值。如果符号的长度超过6个字符,还需要申请存放符号名的存储空间,用原来存放符号名的半个结点作为指向存放符号名的指针。
2.字符串
字符串在内存中是以连续的空间存储的。
3.表
表通过一组结点来存储。这些结点用右指针指向各自下一个元素的地址,最后一个结点的右指针为空,用左指针指向各自的元素。下图为表(A B C D)、(A(B C)(D E))和(setq X(+ (* A B)(/C D)))的存储结构。
4.点对(dotted pair)
点对是一种特殊的表。如果表只有两个元素,且每个元素都是原子,这样的表就可以用点对表示。形式为:(原子 . 原子)。例如,(0 . "LINE")、(8 . "A1")。用结点存放点对时,结点的左指针指向第一个元素,右指针指向第二个元素。下图左边为两个元素(原子)的表的结构,右图为点对的存储结构。显然对于两个元素都是原子的表,用点对会节省空间。点对还简化了某些函数对表的运算。所以,点对是AutoLISP常见的数据类型。