




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章程序中的流程控制和AutoLISP檔案,3.1程序中的流程控制AutoLISP程序中的流程由流程控制函數(shù)控制。3.1.1季度結(jié)構(gòu)1。(cond(測試表達(dá)式1結(jié)果表達(dá)式1)(測試表達(dá)式2結(jié)果表達(dá)式2)牙齒函數(shù)從第一個子表開始計算每個子表的測試表達(dá)式,直到其中一個子表的測試表達(dá)式成立為止,然后計算子表的結(jié)果表達(dá)式,并返回結(jié)果表達(dá)式的值。例如,如果I小于或等于1,則n=1;小于或等于2時n=4;小于或等于3時n=10否則,n=100。使用Cond函數(shù)變量實現(xiàn)變量n和I之間的上述關(guān)系的源代碼:(setq n(cond(=i1)1)(=I2)4)(=i3)10)(t100)C例如,在上述表達(dá)式中,
2、如果I等于0,并且符合第一個測試表達(dá)式(=I 1)牙齒,則返回結(jié)果表達(dá)式的1牙齒,最終結(jié)果為n牙齒1,操作結(jié)束。2 .(if測試條件表達(dá)式1表達(dá)式2)如果測試條件表達(dá)式的結(jié)果為真,則執(zhí)行表達(dá)式1;否則,執(zhí)行表達(dá)式2。示例:(if (a 1) (setq b 2)牙齒表達(dá)式的含義如下:如果a大于1,則b等于2;否則,不執(zhí)行計算,計算結(jié)束。(if (a 1) (setq b 2) (setq b 3)牙齒表達(dá)式的含義如下:如果a大于1,則b等于2,否則b等于3,評估結(jié)束。注意:牙齒函數(shù)(測試條件表達(dá)式、表達(dá)式1和表達(dá)式2)最多只有3個自變量。首先,(if(a1)(set qb2)(print(ba
3、)(set qb4)(printb)節(jié)目段的原始意圖是,如果條件成立,則b等于2,但是在運行節(jié)目段時,首先要確定if函數(shù)收購數(shù),第一個參數(shù)是測試條件如果用括號括起節(jié)目段(if(a1)(set qb2)(print(ba)(set qb4)(printb),則在計算條件成立或不成立的表達(dá)式時,原因首先是內(nèi)層表這顯然是無效的函數(shù)名稱。使用Progn函數(shù)可以很好地解決牙齒節(jié)目段的問題。3.(prong表達(dá)式.)牙齒函數(shù)將n個表達(dá)式合并為if函數(shù)表達(dá)式。執(zhí)行時按順序計算n個表達(dá)式,返回最后一個表達(dá)式的計算結(jié)果。示例:(if(a1)(progn(set qb2)(print(ba)(progn(set
4、qb4)(printb)節(jié)目段的執(zhí)行過程為4,除非以下條件成立,3.1.2回路結(jié)構(gòu)1。(repeat整數(shù)n表達(dá)式)重復(fù)n次并計算所有表達(dá)式,返回最后一個表達(dá)式的計算結(jié)果。示例:(setq a 1 b 100) (repeat 10 (setq a(1 a)其他表達(dá)式(setq b(10 b)的運行結(jié)果:a為11,b為200,返回值為200。2 .(while測試表達(dá)式)如果測試結(jié)果不是nil牙齒,則執(zhí)行每個表達(dá)式,直到測試結(jié)果牙齒為nil。范例:(setq i1a 10)(while(=i10)(setq a(a10)其他表示式(setq I (1 I)執(zhí)行結(jié)果:I為11,a為110,傳回值為
5、標(biāo)題是母雞每只3美元,公雞每只2美元,小雞每只0.5美元。100美元買100只雞,每只有幾只母雞、幾只公雞、幾只小雞(不包括0只)。牙齒例子沒有適當(dāng)?shù)挠嬎愎?,只能利用枚舉來試驗適當(dāng)?shù)慕Y(jié)果。首先分析母雞數(shù)量的范圍。如果母雞20,剩下40美元。(阿爾伯特愛因斯坦,Northern Exposure(美國電視電視劇),母雞用剩下的錢買一只公雞,就能買76只小雞,但雞的總數(shù)是97(低于100),因此母雞的數(shù)量必須少于20。同樣,買了一只母雞和32只公雞后,剩下的33只最多買66只小雞,雞的總數(shù)為99(低于100),因此公雞的數(shù)量必須低于32。小雞的數(shù)量是100減去母雞和公雞的總和。公雞數(shù)和錢數(shù)均為1
6、00時打印牙齒解法。范例3-1百系購買程序(defunch icken(/hen cock chick cost)(setq hen 1)(while(hen 20);母雞的數(shù)量為20(setq cock 1)(while(cock 32);)不超過。公雞的可能數(shù)量是32(setq chick(-100 hen cock);)不超過。小雞數(shù)量(setq cost(* 3 hen)(* 2 cock)(* 0.5 chick);三個茄子雞的錢數(shù)(if (=cost100) (print(列表母雞=hen公雞=cock小雞=chick)(setq cock(1 cock);公雞的數(shù)量加一(setq
7、 hen(1 hen);母雞的數(shù)量加1)(princ);自動關(guān)機),說明:程序的第3行(setq hen 1)牙齒是不可渡邊杏的。否則,第4行(while (hen 20)中的hen未定義。在第5行(setq cock 1)第3行復(fù)蓋時,沒有語法錯誤,但內(nèi)部循環(huán)cock的值首次從1增加到32,然后固定為32,并產(chǎn)生算法錯誤。程序的第12行(setq cock (1 cock)不能只寫入(1 cock),表達(dá)式(1 cock)返回cock 1的值,但cock的值保持不變。這是1函數(shù)和C語言運算的差異。第10行(print (list 母雞= hen 公雞= cock 小雞= chick )牙齒(
8、print 母雞= hen 公雞)加載程序后,在“Command:”提示下輸入(chicken)。結(jié)果: (母雞=2只公雞=30只小雞=68)(母雞=5只公雞=25只小雞=70)(母雞=8只公雞=20只小雞=72)(母雞=11只公雞=3.2 AutoLISP節(jié)目檔案3.2.1 AutoLISP文件的特征AutoLISP文件的擴展名。LSP由多個AutoLISP表達(dá)式組成。一個LISP文件可以定義多個函數(shù)或AutoCAD命令。表達(dá)式類似于語句。表達(dá)式可以分成多行,一行可以寫多個表達(dá)式。連續(xù)數(shù)個空格等于一個空格。以下是表示式分割成多個列的例證:(defun plus(x y)(* x y)x)以下
9、是每行(setq a 2.0) (setq b 4.0) (a b)(解決多個表達(dá)式的示例,其中牙齒問題的方法是縮進(jìn)格式:節(jié)目代碼行嵌套得越深,向右縮進(jìn)就越大。例如,定義以下示例f(x)函數(shù):以不縮進(jìn)格式寫入(defunfun(x)(cond(x0)1)(=x0)2)(x0)0),以縮進(jìn)格式寫入Visual LISP是自由編寫程序的縮進(jìn)程序,3.3.2程序的注釋注釋不僅提高了程序的可讀性,便于程序的讀取和調(diào)試,還便于程序的維護、遷移和擴展。注釋可以是整行、整個段落或行之間的注釋。完整或最后一行注釋用分號“;”由表示,起始行和結(jié)束行的結(jié)尾是注釋部分。示例:(setq area(* pi r);計
10、算圓的整個段落或行之間的注釋,并輸入“;以“|”開頭,然后選擇“|;”以開頭,之間可以短到幾個字,幾行。例如,行之間的注釋:(setq tmode|在此處添加注釋|;(getvar tilemode)以下是整個段落的注釋:(setvar ortho mode 1);|注釋開頭連續(xù)注釋,注釋到此為止|;(princ nORTHOMODE set On。),示例3-2定義用于打印ASCII代碼為33 90的字符的命令。牙齒程序?qū)⒋蛴SCII代碼33 90的字符。在Command:提示下,輸入pras (defun c: pras (/as)。將Pras定義為AutoCAD命令,將as定義為本地收
11、購(setqas33)。將As作為第一個ASCII代碼33(while(=as90);While循環(huán)開始(princ(chras);打印ASCII代碼中的as字符(terpri);新行(set QAS(1as);將As設(shè)置為as中的以下ASCII代碼);While循環(huán)結(jié)束);命令定義結(jié)束,3.2.3在AutoCAD環(huán)境中加載AutoLISP檔案(1)以命令行方式使用AutoLISP檔案加載load函數(shù),load函數(shù)調(diào)用格式為Command:(load驅(qū)動器3360路徑檔案名稱錯誤消息)加載成功時,如果加載失敗,將返回用戶定義的錯誤消息,如果用戶未定義錯誤消息,則加載例如,fi1e1.lsp文件
12、中的最后一個表達(dá)式定義了具有d:user1路徑的函數(shù)func1。加載文件的表達(dá)式找不到command: (load d 3360 user 1 fi1e 1牙齒文件!)加載成功時,返回函數(shù)名稱func1,否則找不到文件!牙齒消息。如果在調(diào)用函數(shù)時省略了“錯誤消息”(例如command:(load d :/user 1/fi1e 1),則在成功加載后返回函數(shù)名稱func1,否則返回。error : load failed :d : user 1 fi1e 1。(2)以對話框方式選擇下拉菜單ToolsLoad Application項目、選擇下拉菜單ToolsAutoLISPLoad項目或“com
13、coms,3 .可以在AutoCAD自動加載開始時自動加載四個lisp文件:acad.lsp、acad2006.lsp、acaddoc.lsp和acad2006doc.lsp??梢詣?chuàng)建和維護這些文件,其中acad.lsp和acaddoc.lsp只能由用戶創(chuàng)建。AutoCAD在加載過程中不報告有關(guān)相關(guān)文件是否存在或是否已加載的信息。AutoCAD加載菜單時與菜單文件同名的擴展名。自動加載mnl的lisp文件。4 .間接自動加載如果將調(diào)用autoload函數(shù)的表達(dá)式寫入自動加載的文件(例如acad2006doc.lsp),則啟動AutoCAD時自動加載文件(例如acad2006doc.lsp)時調(diào)
14、用的autoload函數(shù)也可以加載某些lisp文件,Autoload函數(shù)調(diào)用的格式為command: (autoload lisp檔案名稱命令無論函數(shù)加載是否成功,都返回nil。autoload函數(shù)與load函數(shù)不同,在執(zhí)行調(diào)用函數(shù)的表達(dá)式后,AutoCAD只記錄加載的lisp檔案名稱及其命令行表,而不加載lisp檔案本身。牙齒lisp文件直到調(diào)用命令表中的某個命令時才實際加載,并且可以調(diào)用lisp文件中定義的任何AutoCAD命令。也就是說,如果未調(diào)用lisp文件中定義的命令,則lisp文件將暫時加載到內(nèi)存中,從而節(jié)省內(nèi)存空間。例如,文件“file1.lsp”定義了多個存儲在AutoCAD支持目錄中的AutoCAD命令,例如“cmd1”、“cmd2”等。使用Autoload加載file1.lsp的表達(dá)式如下:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育產(chǎn)業(yè)市場營銷中的區(qū)域市場差異化策略考核試卷
- 儲存庫房照明與消防系統(tǒng)檢查考核試卷
- 品牌個性表達(dá)考核試卷
- 智能決策考核試卷
- 企業(yè)承包合同(14篇)
- 輕量化設(shè)計基礎(chǔ)
- 個人下半年工作總結(jié)12篇
- 大班健康《細(xì)菌家族》
- 水果拼盤活動方案
- 森林戶外徒步活動方案
- 數(shù)據(jù)中心運維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 2023-2024學(xué)年人教版數(shù)學(xué)八年級下冊期末復(fù)習(xí)試卷(含答案)
- 2024年租賃業(yè)務(wù)操作手冊3篇
- 中國經(jīng)皮冠狀動脈介入治療指南(全文版)
- 2025年山東鐵投集團招聘筆試參考題庫含答案解析
- 我的植物朋友向日葵400字
- 《化工園區(qū)有毒有害氣體環(huán)境預(yù)警體系技術(shù)規(guī)范》
- 土方車隊運輸居間合同范文
- EHS工程師招聘面試題與參考回答(某大型央企)2025年
- 醫(yī)院培訓(xùn)課件:《外科手術(shù)部位感染預(yù)防與控制》
- 2023年題工會基礎(chǔ)知識試題及答案
評論
0/150
提交評論