Biểu thức điều kiện

Một phần của tài liệu Tài liệu Đồ án tốt nghiệp Tìm hiểu AutoLISP và ứng dụng trong autoCAD pdf (Trang 26 - 31)

3.7.1. Biểu thức điều kiện

3.7.1.1 Các hàm so sánh

a. Hàm =

• Hàm này trả về giá trị T nếu các phần tử bằng nhau. • Cú pháp: (= phantu1 phantu2 ….)

• Hàm chỉ chấp nhận tham số kiểu số hoặc kiểu chuỗi. Khi so sánh chuỗi cần phân biệt chữ hoa, chữ thường.

b. Hàm EQUAL

• Định giá trị các biểu thức và kiểm tra các giá trị này có bằng nhau không. Hàm chấp nhận mọi kiểu dữ liệu.

• Cú pháp: (equal expr1 expr2 [fuzz])

¾ Tham số fuzz cung cấp sai số cho phép bằng nhau và chỉ áp dụng với dữ liệu kiểu số. Các giá trị được coi là bằng nhau nếu sai số giữa chúng nhỏ hơn giá trị fuzz.

c. Hàm EQ: so sánh sự trùng nhau giữa hai danh sách. • Cú pháp: ( Eq expr1 expr2)

• Nếu expr1 expr2 trùng nhau, hàm trả về T. d. Hàm /= • Cú pháp: (/= phantu1 phantu2…) e. Hàm nhỏ hơn < • Cú pháp: (< phantu1 phantu2…) f. Hàm nhỏ hơn hoặc bằng • Cú pháp: (<= phantu1 phantu2…..) g. Hàm lớn hơn < • Cú pháp: (> phantu1 phantu2…..) h. Hàm lớn hơn hoặc bằng • Cú pháp: (>= phantu1 phantu2…..)

3.7.1.2 Các hàm kiểm tra kiểu dữ liệu

a. Hàm ATOM :

• Cú pháp: (Atom phần tử) b. Hàm LISTP

• Kiểm tra dữ liệu có phải là kiểu danh sách hay không. • Cú pháp: (Listp phantu)

• Cú pháp: (numberp phantu) d. Hàm MINUSP

• Kiểm tra dữ liệu có phải số âm hay không. • Cú pháp: (minusp phantu)

e. Hàm ZEROP

• Kiểm tra dữ liệu có phải là số 0 không. • Cú pháp: (zerop phantu)

f. Hàm BOUNDP: trả về T nếu tham số là nguyên tố và nó được gắn với một giá trị. Ngược lại sẽ trả về nil.

• Cú pháp: (Boundp phantu)

g. Hàm NULL: kiểm tra một biến hoặc danh sách có rỗng hay không. • Cú pháp: (null phantu) h. Hàm TYPE: Trả về kiểu dữ liệu của tham số. • Cú pháp: (type item) 3.7.2. Rẽ nhánh chương trình 3.7.2.1 Hàm IF • (If biểu thức điều kiện biểu thức) - Dạng IF THEN. Nếu biểu thức điều kiện đúng thì biểu thức sẽ được thực hiện. Ngược lại biểu thức sẽ không được thực hiện.

• Ví dụ: viết chương trình cho phép người dùng lựa chọn vẽ hoặc không vẽ đường tròn

(defun C:duongtron () (initget 1 “Yes No”)

(if (= “Yes” (getkword “\n Co ve vong tron khog <Y/N>:”));biểu thức kiểm tra

(command “.Circle”);biểu thức )

(princ) )

• (If biểu thức điều kiện biểu thức Else_biểu thức) - Dạng IF THEN ELSE. Nếu biểu thức điều kiện đúng thì biểu thức được thực hiện. Ngược lại Else_biểu thức được thực hiện.

• Ví dụ: chương trình kiểm tra số nhập vào có là số hay không (defun number (a / b)

(if

(numberp a) ;biểu thức điều kiện (princ (setq b (- a 32))) ;biểu thức (adsbygoogle = window.adsbygoogle || []).push({});

(princ “\n Khong phai dang so”) ;else_biểu thức )

(princ) )

3.7.2.1 Hàm Progn

• Hàm này dùng để nhóm nhiều biểu thức thành một biểu thức duy nhất dùng trong hàm If. • Cú pháp: (Progn biểu thức…..) • Ví dụ: (Progn (setq Z 12) (Setq X 2) (setq Y (- Z X))) 3.7.3 Các hàm logic a. Hàm AND • Cú pháp: (And biểu thức….) • Ví dụ:

(setq a 10 b”ham” c nil d ‘(0 0) e 20.12)

(and (> a 0) (<a 20)) ;trả về T (and (> a 0) (= a 12) (<a 20)) ;trả về nil b. Hàm OR

• Cú pháp: (Or biểu thức…) • Ví dụ:

(setq a nil b nil c 20)

(or (> c -10) (< c 30)) ;trả về T (or a b) ;trả về nil c. Hàm NOT • Cú pháp: (Not phần tử) • Ví dụ: (not nil) ; trả về T (not T) ; trả về nil (not (and 1 3)) ; trả về nil

3.8. Vòng lặp

3.8.1 Hàm Repeat

• Hàm Repeat tạo ra vòng lặp với số lần nhất định. • Cú pháp: (Repeat num expr)

¾ Num: là một số nguyên dương, xác định số lần định giá trị các biểu thức expr. Hàm trả về giá trị cuối cùng trong vòng lặp.

¾ Nếu Num là số âm hoặc 0 thì hàm repeat không định giá trị các biểu thức và trả về nil. • Ví dụ: (setq x 10 y 4) (repeat 10 (setq x (+ 2 x)) (setq y (+5 y)) ) ; hàm trả về 54 3.8.2 Hàm While • Hàm while tạo ra vòng lặp có điều kiện. Vòng lặp sẽ kết thúc khi điều kiện lặp không còn thoả mãn. • Cú pháp: (whileđk lặp biểu thức)

• Khi điều kiện lặp vẫn trả về giá trị khác nil, các biểu thức sẽ tiếp tục được định giá trị. Quá trình được thực hiện khi điều kiện lặp trả về giá trị nil. • Ví dụ: vòng lặp sẽ kết thúc khi nhập vào một số âm

(setq n 0)

(while (not (minusp n))

(setq n (getint “\n Nhap vao mot so bat ky khong am”)) )

3.8.3 Hàm Append

• Hàm Append gộp nhiều danh sách thành một danh sách duy nhất. Hàm này có ý nghĩa là thêm các phần tử vào vị trí cuối cùng của một danh sách có sẵn.

• Cú pháp: (Append biểu thức)

• Sử dụng hàm Append trong vòng lặp while, ta có thể bổ sung thêm phần tử vào một danh sách có sẵn.

• Ví dụ: nhập vào số thực bổ sung cho danh sách realnum, dừng khi ấn Enter (setq realnum nil)

(while (setq x (getreal “\n nhap vao so thuc (an Enter de dung): ”)) (set realnum (append realnum (list x)))

) 3.8.4 Hàm 1+ • Cú pháp: (1+ num) 3.8.5 Hàm 1- • Cú pháp: (1- num) • Ví dụ: (1- 4) ; trả về 3

3.8.6 Truy xuất từng phần tử trong danh sách

a. Hàm FOREACH

• Hàm Foreach duyệt từng phần tử trong danh sách. Tại mỗi thời điểm, giá trị của từng phần tử trong danh sách được gán tạm thời cho biến name. Sau đó các biểu thức expr được định giá trị. Nếu trong các biểu thức có chứa biến name, thì giá trị biến name trong từng thời điểm sẽ khác nhau. Nếu danh sách rỗng thì hàm trả về nil.

• Cú pháp: (Foreach name list expr) • Ví dụ: in ra màn hình từ 1 đến 5

(foreach dsach (list “1” “2” “3” “4” “5”) princ (strcat “\n” dsach))(princ) b. Hàm SET (adsbygoogle = window.adsbygoogle || []).push({});

• Hàm set rất có ich khi làm việc với biến và tên biến trong hàm foreach. • Cú pháp: (Set sym expr)

¾ Sym phải là kiểu biến không định giá trị. Hàm set gán giá trị của expr cho biến chứa trong tham số sym.

• So sánh hàm setq và set

¾ Hàm setq gán giá trị cho một biến mà không định giá trị cho biến này.

¾ Hàm set trước tiên định giá trị của biến sym, sau đó mới gán giá trị cho biến tìm được.

¾ Setq = set + quote c. Hàm EVAL

• Hàm eval trả về kết quả của việc định giá trị biểu thức expr.

• Biểu thức expr được định giá trị cho đến mức cuối cùng, loại bỏ các kết quả ở mức trung gian.

• Ví dụ:

(setq X “yes” Y 15 Z ‘Y w Z) (eval X) ;trả về “yes”

Một phần của tài liệu Tài liệu Đồ án tốt nghiệp Tìm hiểu AutoLISP và ứng dụng trong autoCAD pdf (Trang 26 - 31)