資源描述:
《autolisp編程心得》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、Autolisp編程心得海闊憑魚躍,天高任鳥飛。三山半落青山外,一水中分白鷺洲。年年歲歲花相似,歲歲年年人不同。東邊日出西邊雨,道是無晴卻有晴。春風又綠江南岸,明月何時照我還。1.養(yǎng)成良好的書寫習慣眾所周知,Lisp是一種表結構語言,括號必須成對出現,在調試時往往為遺漏了一個括號大費周折,所以,養(yǎng)成一個好的編程習慣是學好Lisp所必須的。⑴選擇一個較好的編輯器,這是一個基本條件,建議使用VisualLisp編輯器或Lisplink等專用編輯器,此類編輯器可以對函數突出顯示。⑵按Lisp(DCL)
2、專有格式書寫,并經常對程序進行“格式化”,及時發(fā)現語法錯誤,并有利于調試是查找錯誤。⑶使用自定義函數,并輔助以適當得注釋,在較大程序中按功能使用自定義函數可以使得程序條理化。2.函數中循環(huán)與轉移的使用在高級語言中一般有類似“goto”的語句實現轉移,在AutoLisp中沒有轉移的函數。我們可以使用自定義函數實現轉移,用if及cond輔助實現條件轉移。當我們需要實現在滿足一定條件時進行循環(huán)的功能,一般使用while函數,但有時需要判斷的條件較復雜時,使用while函數往往不能實現或使得程序不夠簡潔
3、。這時我們可以使用“轉移”,將需要實現的功能作為(子)函數,使用恰當,可以在程序中任意“轉移”。一般認為,當一段代碼在不同處重復使用時,我們才會使用子函數定義,其實,利用函數的更大的優(yōu)點是使得程序更加結構化。這就使得我們不必拘泥于程序中的循環(huán)語句,而使用函數的循環(huán)調用,輔助適當的判斷,實現“轉移”,如A->B->A。當然也可以進行自身調用,構成一個“標準的”循環(huán)。如例一中,“程序執(zhí)行完畢返回”與“空選返回”兩種情況如果使用循環(huán)語句,其條件是完全不同的,而將函數本身作為子函數調用,程序簡潔明了。3
4、.initget函數中關鍵字“”(空格)的使用空格可以被用作關鍵字,一般多用來定義鼠標右鍵退出。⑴當用戶輸入函數不支持控制位(如entsel、nentsel、nentselp)時,可直接使用“(initget"")”。⑵當用戶輸入函數支持控制位(如getpoint等)時,可使用“(initget1"")”禁止空輸入,而將回車等空輸入作為關鍵字使用。⑶當同時使用其它關鍵字時,應該將空格作為一系列關鍵字的最后一個,用“(initget"C")”(兩個空格)調用,否則無效。見例一。**********
5、**************************************;;例一(defunett_ct()(initget"C");關鍵字“C”及空格(setqs0(entsel"設置顏色C/選取文本:"))(cond((=s0"C")(ett_col));轉設置顏色子函數((=s0"")nil);空格退出((and(=(types0)'LIST);選擇實體(=(cdr(assoc0(entget(cars0))))"TEXT");判別文本)...;操作內容(ett_ct);編輯后返回
6、選擇)(t(ett_ct));空選返回選擇))************************************************有時需要進行復雜的判斷,使用如“(=s0"")”語句可能不能準確判別輸入的空格關鍵字與空選擇,可以使用“(=(types0)'STR)”語句。4.Lisp的暫停與while的特殊使用Lisp一般在交互輸入時才會暫停,如果只需要實現屏幕顯示暫停,可使用grread函數,grread函數對所有合法的輸入設備均會作出反應,有時我們只希望對鍵盤有反應,可使用whi
7、le函數進行循環(huán)。*******************(princ"PressENTERtocontinue:")(while(/=(car(grread))2))*******************while用于滿足一定條件的循環(huán),其標準語法為:(whiletestexpr[expr...])其中expr解釋為“在testexpr為nil之前要求值的一個或多個表達式”,為可選項(在R14之前沒有方括號,但仍為可選項)。正常我們使用while時,總會有expr項,更多的時候,我們是為了e
8、xpr項才會使用這種循環(huán)語句,所有我們往往有expr項是不可缺少的感覺。這里我們使用while函數的語法是while函數的特例,即沒有expr項的情況。如果希望對鼠標右鍵同時反應,可以使用:*******************(princ"PressENTERtocontinue:")(while(and(/=(setqa(car(grread)))2);鍵盤(/=a11);鼠標右鍵(SHORTCUTMENU=0)(/=a25);鼠標右鍵(SHORTCUTMENU≠0)))********