AutoLISP处理的对象是符号表达式(简称表达式)。表达式相当于其他编程语言中程序的语句。
(1)表达式的构成
表达式是由原子或表构成的。原子可细分为数原子、串原子和符号原子。数或串原子的值是数或串本身,符号原子的值是赋给该符号的值。例如:5、12.5、“ABC"是单个原子构成的表达式。
多数情况下,表达式以表的形式存在,其格式如下:
(函数名 [变元]…)
变元的数量可能为0,也可能任意多个,这取决于具体函数。每个参数还可以是一个表达式。
**表达式形式的表,左圆括号之后的第一个元素必须是函数名。 **
(2)表达式的前缀表示法
AutoLISP采用前缀表示法,将函数名放在所有操作数之前。
(3)表达式的求值过程
在LISP语言中,函数之间不存在是否优先的关系,运算的先后顺序只能通过表的层次来实现,最里层的表最先被求值,把求值的结果返回给外层表,直至求值完毕。
如果输入的或者从文件中读入的表达式不正确,将显示出错信息,最常见的出错信息是:
(((>
表示缺少与左圆括号匹配的右圆括号,“(”的个数即为缺少右圆括号的数量。如果出现该信息,输入与所提示的左圆括号相等的右圆括号既可。由于所缺的右圆括号不一定都是最后的,所以可能产生错误的结果。
如果遗漏了与左端双引号匹配的右端的双引号,显示的出错信息为:
(">
在这种情况下输入匹配的双引号也不一定使表达式能正常求值。此时只能按Esc键终止当前的输入,重新输入表达式。
用quote函数可以禁止对表求值。
对于不需求值而直接整体引用的表,例如将一个表示三维点的表(3 2 1)赋给变量p,如果表达式为(setq p(3 2 1)), 将中断求值过程并显示; 错误: 函数错误: 3 出错信息。因为首先对内层表求值,而内层表的第1个元素“3”不是函数名,所以停止求值。此时应该用quote函数,将表达式改为(setq p (quote(3 2 1))),这样就不再对表(3 2 1)求值,而是将将表(3 2 1)整体赋给变量p,使之表示一个3维的点。
quote函数可用一个单引号“'”表示。例如(quote (10 20))可以表示为'(10 20)。如果将(10 20)这个2维点赋给变量p2,可写成:
(setq p2 '(10 20))
注:以上均摘录自AutoLisp学习资料