AutoLISP處理的對象是符號表達式(簡稱表達式)。表達式相當于其他編程語言中程序的語句。
(1)表達式的構成
表達式是由原子或表構成的。原子可細分為數(shù)原子、串原子和符號原子。數(shù)或串原子的值是數(shù)或串本身,符號原子的值是賦給該符號的值。例如:5、12.5、“ABC"是單個原子構成的表達式。
多數(shù)情況下,表達式以表的形式存在,其格式如下:
(函數(shù)名 [變元]…)
變元的數(shù)量可能為0,也可能任意多個,這取決于具體函數(shù)。每個參數(shù)還可以是一個表達式。
**表達式形式的表,左圓括號之后的第一個元素必須是函數(shù)名。 **
(2)表達式的前綴表示法
AutoLISP采用前綴表示法,將函數(shù)名放在所有操作數(shù)之前。
(3)表達式的求值過程
在LISP語言中,函數(shù)之間不存在是否優(yōu)先的關系,運算的先后順序只能通過表的層次來實現(xiàn),最里層的表最先被求值,把求值的結果返回給外層表,直至求值完畢。
如果輸入的或者從文件中讀入的表達式不正確,將顯示出錯信息,最常見的出錯信息是:
(((>
表示缺少與左圓括號匹配的右圓括號,“(”的個數(shù)即為缺少右圓括號的數(shù)量。如果出現(xiàn)該信息,輸入與所提示的左圓括號相等的右圓括號既可。由于所缺的右圓括號不一定都是最后的,所以可能產生錯誤的結果。
如果遺漏了與左端雙引號匹配的右端的雙引號,顯示的出錯信息為:
(">
在這種情況下輸入匹配的雙引號也不一定使表達式能正常求值。此時只能按Esc鍵終止當前的輸入,重新輸入表達式。
用quote函數(shù)可以禁止對表求值。
對于不需求值而直接整體引用的表,例如將一個表示三維點的表(3 2 1)賦給變量p,如果表達式為(setq p(3 2 1)), 將中斷求值過程并顯示; 錯誤: 函數(shù)錯誤: 3 出錯信息。因為首先對內層表求值,而內層表的第1個元素“3”不是函數(shù)名,所以停止求值。此時應該用quote函數(shù),將表達式改為(setq p (quote(3 2 1))),這樣就不再對表(3 2 1)求值,而是將將表(3 2 1)整體賦給變量p,使之表示一個3維的點。
quote函數(shù)可用一個單引號“'”表示。例如(quote (10 20))可以表示為'(10 20)。如果將(10 20)這個2維點賦給變量p2,可寫成:
(setq p2 '(10 20))
注:以上均摘錄自AutoLisp學習資料