Visual LISP 第2章 數據類型、表達式和函數(5)函數

1.定義AutoLISP函數函數

  (defun 函數名(變元……/局部變量……)表達式)spa

  (1)函數名與變量名的命名規則相同,不該與現有AutoLISP函數重名,不然,現有函數將被新定義的功能所取代。(2)變元即參數。即使沒有變元也不能省略"()"。(3)局部變量。這裏的局部變量是指侷限於該函數內部所用的變量,只在該函數調用期間獲得定義,調用結束,局部變量的值均爲nil,同事釋放所佔存儲空間。如不聲明,它們則將成爲全局變量。局部變量的聲明不只能夠節省存儲空間,還能夠避免函數之間相互干擾。局部變量和變元之間用除號隔開。即便沒有變元,也能夠後局部變量說明,必須加除號。(4)表達式。用於描述該函數的運算。(5)返回值。最後一個表達式返回值即爲該函數的返回值code

  【例】定義一個已知圓柱體的半徑和高,計算其體積的函數,源代碼以下:blog

1 ( defun volume(r h / v)
2     ( setq v( * r r pi h))
3 )

  該函數的函數名是volume,兩個變元r(半徑)和h(高度),有一個局部變量v,返回表達式( setq v( * r r pi h))的值。遞歸

2.調用AutoLISP函數ci

  (函數名[變元]……)class

  

3.遞歸定義AutoLISP函數變量

  AutoLISP能夠在一個函數內部定義另外一個函數,也能夠遞歸定義函數。command

 【例】定義階乘函數。方法

4.調用AutoCAD命令

  AutoLISP用command函數調用AutoCAD命令,其格式爲:(command "AutoCAD命令" "命令所需的數據"……)

  【例】繪製以(2,4)爲圓心,5爲半徑的圓和(-2,-4)爲圓心,5爲半徑的圓

 (command "circle" "2,4" "5")

 

(command "circle" '(-2 -4) 5)

  【例】已知p1,p2,p3爲不在同一條直線上的三個點,利用這三個點畫圓

1 (setq p1 '(100 100))
2 (setq p2 '(-100 100))
3 (setq p3 '(-100 -100))
4 (command "circle" "3p" p1 p2 p3)

  【例】繪製p1(0,0)到p2(10,0)的一段直線

(command "line" "0,0" "10,0" "")
(command "line" '(0 0) '(10 0) "")
(command "line" (list 0 0) (list 10 0) "")

  最後的雙引號表明一個回車或空格。(書上第13頁【例2-6】的最後一種畫線方法實驗失敗,因此就不寫了)。

5.定義AutoCAD命令

  用defun函數定義AutoCAD命令,格式以下:

  (defun C:AutoCAD命令名 (/局部變量……) 表達式……)

  定義AutoCAD命令與定義函數基本相同,不一樣之處有兩點:(1)命令名前加"C:"。(2)變元表內沒有變元,但能夠有局部變量說明。此外,還要注意所定義的AutoCAD命令不該與現有的AutoCAD命令重名。

相關文章
相關標籤/搜索