AutoLisp‎ > ‎Ngôn ngữ AutoLisp‎ > ‎

IV. Hàm do người dùng định nghĩa

đăng 21:04, 11 thg 10, 2011 bởi Lisp Việt   [ đã cập nhật 02:27, 12 thg 10, 2011 ]

Các hàm này tương tự như hàm (Function) trong ngôn ngữ lập trình C và C++, thủ tục (Procedure) trong Pascal, hoặc hàm con (Subroutine) trong Fortran

Cú pháp chung của hàm do người dùng định nghĩa:

CÚ PHÁP:

(defun tên_hàm (tham_số/ biến_số_riêng)

...........................; Thân hàm

...........................; Thân hàm

)

Hoặc:

(defun tên_hàm ()

...........................; Thân hàm

...........................; Thân hàm

)

GIẢI THÍCH:

defun: Hàm định nghĩa của AutoLisp

Tên_hàm: Do người lập trình đặt, tên hàm nên viết bằng chữ hoa và không có khoảng trống

Thâm hàm: là các lệnh xử lý của AutoLisp. Một hàm có thể triệu gọi nhiều hàm khác

Trong thân hàm bao gồm có các tham số, biến_số_riêng, biến_số_chung

tham số: Là một hoặc nhều biến hình thức, các biến này chung cho cả chương trình, tham gia vào các biểu thức trong thân hàm và được tồn tại khi thoát ra khỏi AutoCad

Khi được triệu gọi, các biến hình thức này được thay bằng các giá trị

Trong hàm có thể không có tham số

biến_số_riêng: Trong hàm có thể có một hay nhiều biến số riêng, được phân cách nhau bằng dấu trống

Các biến số này nhận giá trị hoặc định nghĩa và chỉ tồn tại bên trong hàm, khi ra khỏi hàm, giá trị các biến này sẽ được xoá khỏi bộ nhớ

biến_số_chung: Khi hàm không có cả tham số lẫn biến riêng, thì các biến số của nó mặc nhiên là biến chung
 
VÍ DỤ:
Ví dụ về tham số:

(defun VD1(x y)

...........................; Thân hàm

...........................; Thân hàm

)

Hàm này có 2 tham số x và y. Hàm được triệu gọi như sau: (VD1 x y)
 
Ví dụ về biến số riêng:

(defun VD2(/ x y)

...........................; Thân hàm

...........................; Thân hàm

)

Hàm này có 2 biến số riêng x và y. Hàm được triệu gọi như sau: (VD2)
 
Ví dụ về biến số chung:

(defun VD3()

...........................; Thân hàm

...........................; Thân hàm

)

Hàm này không có tham số và biến riêng. Hàm được triệu gọi như sau: (VD3)
 

d. Tên hàm là một lệnh của AutoCad:

(defun C:VD4()

...........................; Thân hàm

...........................; Thân hàm

)

Khi chương trình AutoLisp chứa hàm trên được gọi vào AutoCad thì ‘vd4” là một lệnh của AutoCad, có thể gọi trên dòng lện Command: vd4¿


Các trường hợp đặc biệt của tên hàm:

Tên hàm trở thành một lệnh của AutoCad

(defun C:tên_hàm(...)

...........................; Thân hàm

...........................; Thân hàm

)

Hàm được thực hiện ngay sau khi khởi động AutoCad

(defun S::tên_hàm(...)

...........................; Thân hàm

...........................; Thân hàm

)

 

Một số ví dụ minh hoạ

Tạo Layer

(defun C:TAOLOP()

(command "-layer" "n" "dut" "l" "DASHED" "dut" "c" 3 "dut" "")

(command "-layer" "n" "tam" "l" "CENTER" "tam" "c" 1 "tam" "")

(command "Ltscale" 300)

(command "ZOOM" "a")

); Kết thúc hàm

Chương trình khi chạy trong AutoCad sẽ tạo 2 lớp có tên là “dut” và “tam”

 

Đổi màu của đối tượng

(defun C:1() 

(prompt "_.change ")

(princ "\n Change Colour to Red - 1")

(setq sset (ssget))

(if (null sset)

(progn

(princ "\nERROR: Nothing selected.")

(exit)

)

)

(command "_.change" sset "" "P" "C" "1" "")

(princ)

); Hết chương trình

 

Chương trình chạy trong AutoCad sẽ đổi màu của đối tượng chọn sang màu đỏ

 

Comments