VisualLisp編程基礎教程ppt課件_第1頁
VisualLisp編程基礎教程ppt課件_第2頁
VisualLisp編程基礎教程ppt課件_第3頁
VisualLisp編程基礎教程ppt課件_第4頁
VisualLisp編程基礎教程ppt課件_第5頁
已閱讀5頁,還剩68頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2021/2/1,華南理工大學化學與化工學院方利國,1,Visual Lisp 編程基礎,華南理工大學化學與化工學院2016年LGFANGSCUT.EDU.CN 方利國,內容提要,1、 Visual Lisp 語言特點 2、基本運算 3、基本函數 4、 編程中常用的分支及條件判斷函數 5、常用的繪圖命令,2021/2/1,2,華南理工大學化學與化工學院方利國,1、 Visual Lisp 語言特點,1) AutoLISP屬解釋型語言,用戶編寫的程序源代碼直接由解釋器解釋并執(zhí)行,在執(zhí)行這種語言編寫的程序之前不需要中間步驟,用戶可以交互、獨立于其他部分地試驗或驗證程序段或程序語句。 (2)Auto

2、LISP 語言的另一個優(yōu)點是可移植性。AutoLISP 程序可以在運行于多種支持平臺(如 Windows、DOS、UNIX、Macintosh等)上的 AutoCAD中執(zhí)行,與 CPU或操作系統(tǒng)無關,也基本上與AutoCAD的版本無關 (3)有別于其他編程語言,如變量沒有明確的類型,無需預先聲明變量,沒有數組、聯(lián)合、結構及記錄,所有復雜的數據集均由表來表示和處理;沒有語句、關鍵詞以及運算符,是函數定位的語言,其所有運算都由函數調用完成。 (4)表是AutoLISP中一個重要的概念,所謂表是指在一對相匹配的左、右圓括號之間元素的有序集合。表中的每一項稱為表的元素,表中的元素可以是整數、實數、字符

3、串、符號,也可以是另一個表。元素和元素之間要用空格隔開。 (+ 54 67) (* 34 2)(a b (12 45,2021/2/1,3,華南理工大學化學與化工學院方利國,2、基本運算,1)加法 格式:(+ .) 功能:求出所列數的總和,可以是正數或負數 實例 : (+ 70 30) 結果為100 (+ 15 -10 50) 結果為55 (+ -25 -20 90) 結果為45,2021/2/1,4,華南理工大學化學與化工學院方利國,2、基本運算,2)減法 格式: (- .) 功能: 求出第一個數逐次減去后面數的差 實例 (- 120 30 50) 結果為40 (- 15 -10) 結果為2

4、5 (- 15 -10 30) 結果為-5,2021/2/1,5,華南理工大學化學與化工學院方利國,2、基本運算,3)乘法 格式: (* .) 功能:求出所列數的乘積 實例: (* 20 30) 結果為600 (* 1.5 -10 2) 結果為-30 (* 2.5 20 -4) 結果為-80,2021/2/1,6,華南理工大學化學與化工學院方利國,2、基本運算,4)除法 格式: (/ .) 功能:求出第一個數逐次除以后面數的商 實例:(/ 10 ) 結果為10 (/ 110 2) 結果為55 (/ 5 50) 由于表中的兩個元素均為整型數, 結果也為整型數,故結果為0 (/ 5.0 50) 結

5、果為0.1 (/ 40 (/ 7 10) 系統(tǒng)顯示被0除,原因在于表 ( / 7 10)的值為0,2021/2/1,7,華南理工大學化學與化工學院方利國,2、基本運算,5)自然數求冪 格式: (exp ) 功能:求e的次冪值,e=2.71828 實例:(exp 2.0 ) 結果為7.3890561 (exp 0) 結果為1,2021/2/1,8,華南理工大學化學與化工學院方利國,2、基本運算,6)普通數求冪 格式: (expt ) 功能:求的 次方值 實例:(expt 3 3)結果為27 (expt 5 2)結果為25 (expt 2 4)結果為16 (expt 2 1.3)結果為 2.462

6、29,2021/2/1,9,華南理工大學化學與化工學院方利國,2、基本運算,7)求自然對數 格式: (log ) 功能:求的自然對數,要求必須大于零 實例:(log 10.0) 返回2.3025851 (log 9) 返回 2.19722 (log 12) 返回 2.48491 (8)求平方根 格式: (sqrt ) 功能:求的平方根,要求必須大于零 實例:(sqrt 4.0) 返回2.0 (sqrt 12) 返回3.4641 (sqrt 15.0) 返回3.87298,2021/2/1,10,華南理工大學化學與化工學院方利國,2、基本運算,9)求絕對值 格式: (abs ) 功能:求的絕對值

7、; 實例:(abs -3) 結果為3 (abs 5) 結果為5 (abs -6.7) 結果為6.7 (10)求最大值 格式: (max . ) 功能:求, 的最大值 實例:(max 2 3 4 10) 結果為10 (max 5 2 3.6 6.9) 結果為6.9 (max -2 3 4 -10) 結果為4 ,一定要英文狀態(tài)下的括號,2021/2/1,11,華南理工大學化學與化工學院方利國,2、基本運算,11)求最小值 格式: (min . ) 功能:求, 的最大值 實例:(min 2 3 4 10) 結果為2 (min 5 1.2 3.6 6.9) 結果為1.2 (min -2 3 4 -10

8、) 結果為-10 (12)求自然對數 格式: (log ) 功能:求的自然對數,要求必須大于零 實例:(log 10.0) 返回2.3025851 (log 5) 返回 1.60944 (log 7) 返回 1.94591 (/ (log 0.1) (log 10) 返回 -1,2021/2/1,12,華南理工大學化學與化工學院方利國,2、基本運算,13)求余數 格式: (rem . ) 功能:求整除的余數,若參數多于兩個,則將整除后的余數再整除,求出余數,依此類推。 實例:(rem 50 9 4) 返回1 (rem 55 7 5 3) 返回1 (rem 103 12 8 4) 返回3,202

9、1/2/1,13,華南理工大學化學與化工學院方利國,2、基本運算,14)綜合運算 格式:(運算符1 (運算符2 ) (運算符3 ) .) 功能:利用括號達到各種數據混合運算的目的,要求先進行括號內的運算,數據和括號嵌套可增加。 實例:(+ (/ 100 10) (- 20 8 (sqrt 4) 返回 20.0 (* (/ 100 10) (max 20 8 (sqrt 4) 5) 返回1000.0 (* (/ 100 10) (max 20 8 (log 4) 5 (- 65 (sin (/ pi 2) 返回64000.0,2021/2/1,14,華南理工大學化學與化工學院方利國,3、基本函數

10、,1)正弦函數SIN 格式: (sin ) ,其中 用弧度表示 功能:求正弦值 實例:(sin (/ pi 2) 結果為1 (2)余弦函數COS 格式: (cos ) ,其中 用弧度表示 功能:求余弦值 實例:(cos (/ pi 2) 結果為0,2021/2/1,15,華南理工大學化學與化工學院方利國,3、基本函數,3)反正切函數ATAN 格式: (atan ) 功能:求反正切值,單位為弧度,為-/2,/2 實例:(atan 1) 結果為0.785398 , 即(/4) (atan -1) 結果為0.-785398 , 即(-/4) (atan 0) 結果為0 (atan 100000000

11、000) 結果為1.5708,接近/2,2021/2/1,16,華南理工大學化學與化工學院方利國,3、基本函數,4)取整函數FIX 格式: (fix ) 功能:求的整數部分,相當于高級語言中的“INT(數)”這個語句。 實例:(fix 8.8) 結果為8 (fix -8.8) 結果為-8 (fix 19) 結果為19 (5)實型化函數FLOAT 格式: (float ) 功能:求轉化為實型數,不考慮該數原來的類型 實例:(float 13) 結果為13.0 (float 13.3) 結果為13.3 (float -23.3) 結果為-23.3,2021/2/1,17,華南理工大學化學與化工學院

12、方利國,3、基本函數,6)賦值函數SETQ 格式:(setq .) 功能:將表達式的值賦給變量,變量和表達式需成對出現 實例: (setq a 10) 結果 a=10 (setq s “it” ) 結果 s=“it” (setq b 123 c 10 d 45) 結果 b=123 c=10 d=45 (setq t (+ 34 45) 結果 t=79 (setq P1 ( 34 45) 結果是P1點x軸的坐標為34,y軸的坐標為45,其中在表(34 45)前面加了單引號“ ”號,是為了禁止對表(34 45)的求值,需要注意的是所有的單引號和雙引號必須在英文狀態(tài)下輸入,否則就會出現錯誤。如果不用

13、“”,也可以用quote表示,例如用下面的小程序就可以繪制一條從(130,140)到(200,400)的直線。 (setq p1 (130 140) /確定點P1的坐標 (setq p2 (200 400) /確定點P2的坐標 (command “l(fā)ine” p1 p2 “”) /繪制從P1點到P2點的直線是AutoLISP程序中應用程度較高的一個函數,希望讀者引起注意,2021/2/1,18,華南理工大學化學與化工學院方利國,3、基本函數,7)取表中第一元素CAR函數 格式: (car ),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。 功能:提取的頂層第一個元素 實例:(car

14、 (1 3 5) 結果為1 (car ((1 3)6 5) 結果為(1 3) (8)取表中除第一元素外其它元素的CDR函數 格式: (cdr ),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。 功能:提取的除頂層第一個元素外的其它元素 實例:(cdr (1 3 5) 結果為(3 5) (cdr ((1 3)6 5) 結果為(6 5,2021/2/1,19,華南理工大學化學與化工學院方利國,3、基本函數,9)CAR和CDR的組合函數 CAR和CDA可以任意組合,其組合深度可達4層,其執(zhí)行順序從右到左依此執(zhí)行,若搞錯次序,其結果必然出錯。4個層次的組合形式為:CAR、CXXR、CXXX

15、R,CXXXXR,其中X既可以是A也可以是D,例如: (cadr (2 (1 2 3) 34 ) 結果為(1 2 3) (caadr (2 (11 6) 2 3) 34 ) 結果為(11 6) (caaadr (2 (11 6) 2 3) 34 ) 結果為11 (caaddr (2 (11 6) 2 3) (3 4) ) 結果3,2021/2/1,20,華南理工大學化學與化工學院方利國,3、基本函數,10)LAST函數 格式: (last ),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。 功能:提取的頂層中最后一個元素 實例:(last (1 2 3) 結果為3 (last (1

16、2 3 (4 5) 結果為(4 5) (11)NTH函數 格式: (nth ),表必須為引用表而非標準表,但可以是簡單表,也可以是嵌套表。 功能:提取中第個元素,注意第一個元素的序號為0號,依次類推。 實例:(nth 2 (2 3 (4 5) 5) 結果為(4 5) (nth 3 (2 3 (4 5) 5) 結果為5,2021/2/1,21,華南理工大學化學與化工學院方利國,3、基本函數,12)LIST函數 格式: (list ) 功能:將所有的按原位置構成新表,可用于確定點的坐標位置。 實例:(list 2 3 (5 6) 結果為(2 3 (5 6) (list 2 3) 結果為(2 3)

17、下面是一個利用list確定點的位置,繪制圓的小程序: (setq p1 (list 222 33) (setq p2 (list 200 300) (command circle p2 160) (command circle p1 160,2021/2/1,22,華南理工大學化學與化工學院方利國,3、基本函數,13)ATOF函數 格式: (atof ) 功能:將轉換成實型數,返回實型數 實例:(atof 23) 返回結果為23.0 (14)RTOS函數 格式: (rtos ) 功能:將轉換成 按模式數及精度要求的字符串。模式數為1-5,1代表科學計數,2代表十進制,3代表工程計數即整數英尺和

18、十進制英寸,4代表建筑計數格式即整數英尺和分數英寸,5代表分數單位格式。 實例: (rtos 12.5 1 3) 返回 1.250E+01 (rtos 12.5 2 3) 返回12.5 (rtos 12.5 3 3) 返回 1-0.5 (rtos 12.5 4 3) 返回 1-0 1/2 (rtos 12.5 5 3) 返回 12,2021/2/1,23,華南理工大學化學與化工學院方利國,3、基本函數,15)ASCII函數 格式: (ascii ) 功能:將中第一個字符轉換成ASCII碼,并返回該值 實例: (ascii b c) 返回結果為98 (ascii a) 返回結果為 97 (asc

19、ii c) 返回結果為99 (ascii +) 返回結果為43 (ascii y) 返回結果為121 (ascii *) 返回結果為42,2021/2/1,24,華南理工大學化學與化工學院方利國,3、基本函數,16)CHR函數 格式: (chr ) 功能:將ASCII碼為的轉換成相應字符,并返回該字符 實例:(chr 69) 返回結果為E (chr 80) 返回結果為P (chr 42) 返回結果為* (17)ITOA函數 格式: (itoa ) 功能:將轉換成整數字符串 實例: (itoa 5) 返回結果為5 (itoa 6) 返回結果為6 (itoa 7) 返回結果為7,2021/2/1,

20、25,華南理工大學化學與化工學院方利國,3、基本函數,18)ITOA函數 格式: (itoa ) 功能:將轉換成整數字符串 實例: (itoa 5) 返回結果為5 (itoa 6) 返回結果為6 (itoa 7) 返回結果為7,2021/2/1,26,華南理工大學化學與化工學院方利國,3、基本函數,19) ATOI函數 格式: (atoi ) 功能:將轉換成整數,返回值截去小數部分 實例:(atoi 45.4) 返回結果為45 (atoi -5.6) 返回結果為-5 (atoi 7) 返回結果為7 (atoi 34.6ac) 返回結果為34 (atoi df43) 返回結果為0 說明:當數字串

21、中有非數字字符時,則轉換到第一個非數字原子時終止,2021/2/1,27,華南理工大學化學與化工學院方利國,3、基本函數,20)STRCAT函數 格式: (strcat ) 功能:將按先后順序頭尾相連起來,組成一個新的字符串。 實例: (strcat bc etr ty) 返回結果為bcetrty,2021/2/1,28,華南理工大學化學與化工學院方利國,3、基本函數,21)SUBSTR函數 格式: (substr 功能:從中提取一個子串,該子串從起點的字符位置開始,由連續(xù)個字符組成,若缺省,則到字符串結束。 實例: (substr b212c 2 3) 返回結果為212 (substr b2

22、er12c 2) 返回結果為2er12c,2021/2/1,29,華南理工大學化學與化工學院方利國,3、基本函數,22)READ函數 格式: (read ) 功能:將轉化成表或原子,文件處理時經常使用 實例:(read ad) 返回結果為AD (read b) 返回結果為B (read (a b) 返回結果為(A B) (read (3 4) 返回結果為(3 4) 注意返回結果英文字母成了大寫,2021/2/1,30,華南理工大學化學與化工學院方利國,4、 編程中常用的分支及條件判斷函數,1)關系運算函數 關系運算函數是編程中分支及條件判斷函數的基礎,它對數值型表達式的大小進行比較,表達式可以

23、是兩個或兩個以上,其返回值是邏輯變量。比較運算成立,則返回T;不成立則返回nil,常作為條件用于條件判斷語句合循環(huán)判斷語句中,這一點將在下面講解中提到。AutoLISP共有6種關系運算函數,它們分別是“=”等于、“/=”不等于、“”大于、“=”大于等于。其中對于等于的關系函數,表達式只能兩個,下面6種關系函數的實際例子: ( 8 7 3 9) 返回結果nil,全程比較 ( 8 7 3 1) 返回結果T (= 2 2) 返回結果T (= s b) 返回結果nil (/= 1 2 3) 返回結果T (/= 1 1 3) 返回結果nil,只比較前面兩個表達式 (= 5 5 1) 返回結果T,2021

24、/2/1,華南理工大學化學與化工學院方利國,31,4、 編程中常用的分支及條件判斷函數,2)邏輯運算函數 AutoLISP共有3種邏輯運算函數,分別是邏輯和AND、邏輯或OR、邏輯非NOT,下面通過實例說明其應用。 (and a d c 3) 返回結果nil,只要有一個表達式為假,則 返回nil (and d c) 返回結果nil (setq a 3 b 4) 返回結果4,返回最后一個賦值 (and a b) 返回結果T,由于前面給a、b賦了值 (and ( 3 5) 返回結果nil (or 1 2 a b) 返回結果T,只要有一個表達式為真,則返回T (or ( 4 2) ( 6 9) 返回

25、結果T,2021/2/1,華南理工大學化學與化工學院方利國,32,4、 編程中常用的分支及條件判斷函數,3)二分支條件函數IF 格式: (if ) 功能:對進行運算,若成立,則執(zhí)行,否則,執(zhí),兩者必居其一,所以稱之為二分支條件函數,是在編程中經常用到的條件判斷函數。下面是幾個實際例子: (if (= 1 3) 3 5) 測試式不成立,執(zhí)行第二個表達式,第二個表達式為原子,返回5 (if ( 1 3) (setq a 2) (setq a 9) 測試式成立,執(zhí)行第一個表達式,返回2 (if (= 1 3) yes) 測試式不成立,但無第二個表達式,返回nil (if 1 yes no) 測試表達

26、式為1,雖然不為T,但也不為nil,仍執(zhí)行第一表達式,返回“yes,2021/2/1,華南理工大學化學與化工學院方利國,33,4、 編程中常用的分支及條件判斷函數,4)多分支條件函數COND 前面二分支條件函數只能解決兩種結果中選一種的條件判斷,若有多個條件中選一,則需用COND函數。 格式: (cond ( ) ( ) : : ( ) ) 該函數的參數為任意數目的表,每個表有兩個元素,第一個元素為測試式,第二個元素為結果。 功能:對每一個支表中的依此進行運算,若成立,則執(zhí)行該支表對應的,停止后面的測試工作;否則,繼續(xù)執(zhí)行測試執(zhí),直到最后一個分支條件,2021/2/1,華南理工大學化學與化工學

27、院方利國,34,4、 編程中常用的分支及條件判斷函數,實例1: (cond ( 2 1) (setq x 3) /不成立,轉下一分支條件 ( 4 5) (setq x 6) /成立,將6賦值給x ( 8 9) (setq x 9) /雖然成立,但前面分支已成立,故不再測試該分支 ) 返回結果為6,2021/2/1,華南理工大學化學與化工學院方利國,35,4、 編程中常用的分支及條件判斷函數,實例2: (setq x (getreal x=) /輸入實型數x (setq f (cond (= x 0) (= x 1) (* x x x) ) /結束COND ) /結束SETQ 輸入-1,執(zhí)行第一

28、個分支條件,返回-1;輸入0.3,執(zhí)行第二個分支條件,返回0.09;輸入5,執(zhí)行第三個分支條件,返回125.0,2021/2/1,華南理工大學化學與化工學院方利國,36,4、 編程中常用的分支及條件判斷函數,實例3: (cond ( 4 5) (setq x 6) ) /兩個分支條件都不成立,返回nil,2021/2/1,華南理工大學化學與化工學院方利國,37,4、 編程中常用的分支及條件判斷函數,5)順序控制函數PROGN 常和IF函數一起使用,使其在某一條件下,順序執(zhí)行多個表達式。 格式: (progn : : ) 功能:按順序執(zhí)行多個表達式,并返回最后表達式求值結果,表達式需為標準表。下

29、面是兩個實例,2021/2/1,華南理工大學化學與化工學院方利國,38,4、 編程中常用的分支及條件判斷函數,實例1: (progn (setq x 4) (setq y (* x x) (list x y) ) 返回結果為表(4 16,2021/2/1,華南理工大學化學與化工學院方利國,39,4、 編程中常用的分支及條件判斷函數,實例2: (setq x (getreal x=) (if x ( x 0) (progn (setq z 4) (setq y (* z z) ) /結束PROGN ) /結束IF (print (list z y) 輸入3,屏幕打印(4 16)并返回(4 16)

30、;輸入-4,返回nil,2021/2/1,華南理工大學化學與化工學院方利國,40,4、 編程中常用的分支及條件判斷函數,6)常見測試函數 ZEROP函數,用于判斷測試項是否為零,若為零,則返回T,否則返回nil,如(zerop 3)則返回nil;(zerop 0)則返回T。 MINUSP函數用于判斷測試項是否為負,若為負,則返回T,否則返回nil,如(minusp 3)則返回nil;(minusp -1)則返回T。 NUMBERP函數,用于判斷測試項是否為數,若為數,則返回T,否則返回nil,如(numberp (6 3)則返回nil;(numberp 1)則返回T。 ATOM函數,用于判斷測

31、試項是否為原子,若為原子數,則返回T,否則返回nil,如(atom (3 4)則返回nil;(atoma)則返回T; LISTP函數,用于判斷測試項是否為表,若為表,則返回T,否則返回nil,如(listp 3)則返回nil;(listp (1 2)則返回T;其中較為奇怪的是(listp a),返回nil,而(listp w)則返回T,2021/2/1,華南理工大學化學與化工學院方利國,41,4、 編程中常用的分支及條件判斷函數,7)循環(huán)函數 在各種程序編寫中,循環(huán)語句是不可缺少的,AutoLISP的兩種主要循環(huán)函數是WHILE函數和REPET函數,下面分別介紹之。 WHILE函數 格式 (w

32、hile 標準表1 標準表2 : : ) 功能:先對測試表達式進行測試,若其值不為nil,則依次執(zhí)行下面的各個 標準表,執(zhí)行完各 標準表后,再返回來對測試表達式進行測試,直至測試表達式為nil,停止循環(huán)執(zhí)行 下面是一個用WHILE編寫的求的平方的一個程序,2021/2/1,華南理工大學化學與化工學院方利國,42,4、 編程中常用的分支及條件判斷函數,setq a 0) (setq n 1) (while (= n 10) (setq a (+ a (* n n) (setq n (+ 1 n) ) (print a) /打印結果為385,2021/2/1,華南理工大學化學與化工學院方利國,43,4、 編程中常用的分支及條件判斷函數,REPEAT函數 格式 (repeat 標準表1 標準表2 : :,2021/2/1,華南理工大學化學與化工學院方利國,44,4、 編程中常用的分支及條件判斷函數,功能:按該定的次數進行循環(huán)計算,如上面用while語句編寫的程序,用repeat語句編寫,則變?yōu)椋?(setq a 0) (setq n 1) (repeat 10 (setq a (+ a (* n n) (setq n (+ 1 n) ) (print a) /打印結果仍為385,2021/2/1,華南理工大學化學與化工學院方利

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論