AutoLISP处理的对象时符号表达式(简称表达式),相当于其他编程语言的程序语句。
1.表达式的构成
表达式由原子或表构成。原子可细分为数原子、串原子和符号原子。数或串原子的值是数或串本身,符号原子的值是赋给该符号的值。例如,5、12.5、"ABC"是由单个原子构成的表达式。多数情况下,表达式以表的形式存在,(函数名[变元]……)。变元的个数可以为0也可以为任意多个,这个取决于函数本身,每个参数还可以是一个表达式。表达式中,左括号后第一个元素必须为函数名。
2.表达式的前缀表示法
AutoLISP采用前缀表示法,将函数名放在所有操作之前,如(setq x 2.3)。如果将x = ( a + b ) * c改写为AutoLISP表达式,则为( setq x ( * ( + a b ) c ) )
3.表达式的求值过程
在LISP语言中,函数之间不存在优先关系,运算的先后顺序只能通过表的层次来实现。最里面的表最先被求值,把求值的结果返回给外层表,直至求值结束。AutoCAD最多显示6位小数。错误提示,(((_>表示缺少与左括号匹配的右括号。("_>表示遗漏了与左端引用号匹配的右端双引号。
4.表达式的求值规则
规则如下:(1) 整型数、实型数和字符串仪器本身的值作为求值结果;(2)符号以其当前的约束值为求值结果;(3)表根据其第一个元素来进行求值。例如,(+ (* 2 3) (/ 50 3) )先计算(* 2 3)和(/ 50 3)然后将结果6和16返回给其外层表达式原表达式变为(+ 6 16),继续计算的22则返回22.
如果第一个元素是一个表,该表不是调用而是定义函数;那么,若语法正确,则首先定义这个函数,然后继续对表达式求值。如果第一个元素既不是函数名也不是定义函数,则停止求职并显示出错信息。
用quote函数可以禁止对表求值。对于不需要求值而直接整体引用的表,例如将一个表示三维点的表(3 2 1)赋值给变量P。如果表达式为(setq p(3 2 1)),则将显示下图错误。
使用quote函数,表达式改为(setq p(quote(3 2 1))),相当于(setq p ‘(3 2 1))。