AutoLISP處理的對(duì)象是符號(hào)表達(dá)式(簡(jiǎn)稱(chēng)表達(dá)式)碧注。表達(dá)式相當(dāng)于其他編程語(yǔ)言中程序的語(yǔ)句。
(1)表達(dá)式的構(gòu)成
表達(dá)式是由原子或表構(gòu)成的。原子可細(xì)分為數(shù)原子撞秋、串原子和符號(hào)原子阁最。數(shù)或串原子的值是數(shù)或串本身盯拱,符號(hào)原子的值是賦給該符號(hào)的值事甜。例如:5订歪、12.5、“ABC"是單個(gè)原子構(gòu)成的表達(dá)式年局。
多數(shù)情況下际看,表達(dá)式以表的形式存在,其格式如下:
(函數(shù)名 [變?cè)猐…)
變?cè)臄?shù)量可能為0某宪,也可能任意多個(gè)仿村,這取決于具體函數(shù)锐朴。每個(gè)參數(shù)還可以是一個(gè)表達(dá)式兴喂。
**表達(dá)式形式的表,左圓括號(hào)之后的第一個(gè)元素必須是函數(shù)名焚志。 **
(2)表達(dá)式的前綴表示法
AutoLISP采用前綴表示法衣迷,將函數(shù)名放在所有操作數(shù)之前。
(3)表達(dá)式的求值過(guò)程
在LISP語(yǔ)言中酱酬,函數(shù)之間不存在是否優(yōu)先的關(guān)系壶谒,運(yùn)算的先后順序只能通過(guò)表的層次來(lái)實(shí)現(xiàn),最里層的表最先被求值膳沽,把求值的結(jié)果返回給外層表汗菜,直至求值完畢让禀。
如果輸入的或者從文件中讀入的表達(dá)式不正確,將顯示出錯(cuò)信息陨界,最常見(jiàn)的出錯(cuò)信息是:
⊙沧帷(((>
表示缺少與左圓括號(hào)匹配的右圓括號(hào),“(”的個(gè)數(shù)即為缺少右圓括號(hào)的數(shù)量菌瘪。如果出現(xiàn)該信息腮敌,輸入與所提示的左圓括號(hào)相等的右圓括號(hào)既可。由于所缺的右圓括號(hào)不一定都是最后的俏扩,所以可能產(chǎn)生錯(cuò)誤的結(jié)果糜工。
如果遺漏了與左端雙引號(hào)匹配的右端的雙引號(hào),顯示的出錯(cuò)信息為:
(">
在這種情況下輸入匹配的雙引號(hào)也不一定使表達(dá)式能正常求值录淡。此時(shí)只能按Esc鍵終止當(dāng)前的輸入捌木,重新輸入表達(dá)式。
用quote函數(shù)可以禁止對(duì)表求值嫉戚。
對(duì)于不需求值而直接整體引用的表钮莲,例如將一個(gè)表示三維點(diǎn)的表(3 2 1)賦給變量p,如果表達(dá)式為(setq p(3 2 1)), 將中斷求值過(guò)程并顯示; 錯(cuò)誤: 函數(shù)錯(cuò)誤: 3 出錯(cuò)信息彼水。因?yàn)槭紫葘?duì)內(nèi)層表求值崔拥,而內(nèi)層表的第1個(gè)元素“3”不是函數(shù)名,所以停止求值凤覆。此時(shí)應(yīng)該用quote函數(shù)链瓦,將表達(dá)式改為(setq p (quote(3 2 1))),這樣就不再對(duì)表(3 2 1)求值盯桦,而是將將表(3 2 1)整體賦給變量p慈俯,使之表示一個(gè)3維的點(diǎn)。
quote函數(shù)可用一個(gè)單引號(hào)“'”表示拥峦。例如(quote (10 20))可以表示為'(10 20)贴膘。如果將(10 20)這個(gè)2維點(diǎn)賦給變量p2,可寫(xiě)成:
(setq p2 '(10 20))
注:以上均摘錄自AutoLisp學(xué)習(xí)資料