AutoLisp 概述
何志丹
AutoLisp的数据类型,它有10种数据类型,常见的有五种:
整型 INT实数型REAL符号型SYM
字符串 STR表LISP
在AutoLisp中,最基本的数据类型称为符号表达式,也称为S-表达式,它是原子和点对的总称,点对通常表示为表。
原子是一个一般符号系列,有两种类型的原子,一种称为数子原子(简称“数”),AutoLIsp可处理整数和实数,其它不是“数”原子称为非数字原子,它包括符号原子(或称为文字原子)和串原子。
注意:0.4不能写成.4。
符号原子的大小写是等效的。
符号原子可以包含下列字符以外的任何可打印字符。
正反括号用于定义表
句号用于作点对
分号用于注释的开始
‘用作QUOTE函数的简写
双引号用作字符串常数的定界符
符号原子的长度没有限制,且所有的字符都是有意义的,但尽量不要超过6个字符。
约束是一对符号和值,当将一个值赋给符号时,就说符号被约束到那个值。值(而不是符号)决定所代表信息的类型,故一个符号可以接受任何类型的值,其初始值为nil.
在AutoLisp中,有两个特殊的符号原子,即T和nil.
字符串的个数(不包括定界符)称为字符串的长度。字符串可以是任意长度,它们的存储空间是动态分配的,但字符串常量的最大长度不超过100,长度为0字符串称为空串。
可以用“\nnn”的方式表示字符,其中nnn为八进制。
\e Esc \n 换行
\r 回车 \t 制表符(Tab节)
点对是由一个左括号,后接一个S-表达式和空格再接一个句点和空格和一个右括号。
表是指放在一对相匹配的左右括号中的元素有序集合。表中的项称为表的元素,表中的元素可以是任意类型的S-表达式,序号0到n-1。如果嵌套,0层,1层...
表的长度,顶层元素的个数。
只有nil是表(’())又是原子。
表有两种类型:标准表,引用表。
引用表是在表的前面冠以引用符号(’或Quote)对该表不求值。
标准表:第一个元素的值必须是一个合法的已经存在的AutoLisp函数定义,后跟调用该函数的参数。
AutoLisp采用”前缀表示法“即把运算符放在操作数之前,而不是中间,并把运算符(函数名)和操作数(调用函数的参数)用圆括号括起来,以表的方式表示。
一个完整的AutoLisp程序往往是由一系列按顺序排列的S-表达式组成的。
如:
(defun plus (x y)
(+ ( + x y) x))
(SetQ a 2.0)
(SetQ b 2.0)
(plus a b)
一个S-表达式可以分多行写,一行也可以写多个表达式。
注释以分号开始,并在一行的末尾结束,AutoLisp的求值器忽略注释。
AutoLisp是一种求值型语言,求值程序第一次碰到一个求值代码块时,整个块被转换成压宿代码,如果程序中再次碰到那个块,只是简单的运行它。
求值过程:
1,整形,实数,字符串,文件指针,系统内部函数,以及两个特殊的符号原子,对它们求值就是它们本身。
2,符号原子是以当前的约束值作为它们的求值。
3,表是根据它的第一个元素的数据类型进行求值的。
(1)第一个元素的值为表,该表就假定为用户定义的函数。
(2)如果表的第一个元素的求值结果为一个内部函数,则剩余元素作为参数传给该函数,并执行该函数的代码,由函数的类型确定是否对传给它的参数进行求值。