<< Chapter < Page Chapter >> Page >

Ví du:

>(CONS 3 '(1 2 3))

= (3 1 2 3)

>(CONS 3 nil)

= (3)

>(CONS '(a b) '(1 2 3))

= ((A B) 1 2 3)

  • (LIST E1 E2 ... En) nhận vào n biểu thức E1, E2, ..., En, trả về danh sách bao gồm n phần tử V1, V2, ..., Vn, trong đó Vi là giá trị của biểu thức Ei (i=1..n) .

Ví du:

>(list 1 2)

= (1 2)

>(list 'a 'b)

= (A B)

>(list 'a 'b (+ 2 3 5))

= (A B 10)

  • Các vị từ kiểm tra
  • (ATOM a) xét xem a có phải là một nguyên tử.
  • (NUMBERP n) xét xem n có phải là một số.
  • (LISTP L) xét xem L có phải là một danh sách.
  • (SYMBOLP S) xét xem S có phải là một ký hiệu.
  • (NULL L) nhận vào 1 danh sách L. Nếu L rỗng thì trả về kết quả là T, ngược lại thì trả về kết quả là NIL.

Ví du:

>(atom 'a)

= T

>(numberp 4)

= T

>(symbolp 'a)

= T

>(listp '(1 2))

= T

>(symbolp NIL)

= T

>(listp NIL)

= T

>(null NIL)

= T

>(null ‘(a b))

= NIL

>(null 10)

= NIL

  • Các hàm logic AND, OR và NOT
  • (AND E1 E2... En) nhận vào n biểu thức E1, E2,... En. Hàm AND định trị các biểu thức E1 E2... En từ trái sang phải. Nếu gặp một biểu thức là NIL thì dừng và trả về kết quả là NIL. Nếu tất cả các biểu thức đều khác NIL thì trả về giá trị của biểu thức En.

Ví dụ:

>(AND (>3 2) (= 3 2) (+ 3 2))

= NIL

>(AND (>3 2) (- 3 2) (+ 3 2))

= 5

  • (OR E1 E2 ... En) nhận vào n biểu thức E1, E2,... En. Hàm OR định giá các biểu thức E1 E2... En từ trái sang phải. Nếu gặp một biểu thức khác NIL thì dừng và trả về kết quả là giá trị của biểu thức đó. Nếu tất cả các biểu thức đều là NIL thì trả về kết quả là NIL.

Ví du:

>(OR (= 3 2) (+ 2 1) (list 1 2))

= 3

>(OR (= 2 1) (Cdr ‘(a) ) (listp 3 ))

= NIL

  • (NOT E) nhận vào biểu thức E. Nếu E khác NIL thì trả về kết quả là NIL, ngược lại thì trả về kết quả là T.
  • Các hàm điều khiển
  • (IF E1 E2 E3) nhận vào 3 biểu thức E1, E2 và E3. Nếu E1 khác NIL thì hàm trả về giá trị của E2 ngược lại trả về giá trị của E3
  • (IF E1 E2) tương đương (IF E1 E2 NIL)
  • Nếu E2 khác NIL thì (IF E1 E2 E3) tương đương (OR (AND E1 E2) E3)
  • (COND(ÐK1E1)

(ÐK2E2)

..................

(ÐKnEn)

[(TEn+1)]

)

Nếu ĐK1 khác NIL thì trả về kết quả là giá trị của E1, ngược lại sẽ xét ĐK2. Nếu ĐK2 khác NIL thì trả về kết quả là giá trị của E2, ngược lại sẽ xét ĐK3...

......

Nếu ĐKn khác NIL thì trả về kết quả là giá trị của En, ngược lại sẽ trả về NIL hoặc trả về kết quả là giá trị của En+1 (trong trường hợp ta sử dụng (T En+1))

  • (PROGN E1 E2 ... En) nhận vào n biểu thức E1, E2,... En. Hàm định trị các biểu thức E1, E2,... En từ trái sang phải và trả về kết quả là giá trị của biểu thức En.
  • (PROG1 E1 E2 ... En) nhận vào n biểu thức E1, E2,... En. Hàm định trị các biểu thức E1, E2,... En từ trái sang phải và trả về kết quả là giá trị của biểu thức E1.

Hàm do người lập trình định nghĩa

Cú pháp định nghĩa hàm là:

(defun<tên hàm><danh sách các tham số hình thức>

<biểu thức>

)

Ví dụ 1: Ðịnh nghĩa hàm lấy bình phương của số a

(defun binh_phuong (a)

(* a a)

)

Sau khi nạp hàm này cho LISP, ta có thể sử dụng như các hàm đã được định nghĩa trước.

>(binh_phuong 5)

= 25

>(binh_phuong (+ 5 2))

= 49

Ví dụ 2: Ðịnh nghĩa hàm DIV chia số a cho số b, lấy phần nguyên.

Trước hết ta có: a DIV b = (a – a MOD b)/b

(defun DIV (a b)

(/ (- a (MOD a b)) b)

)

Ðệ quy

Một hàm đệ quy là một hàm có lời gọi chính nó trong biểu thức định nghĩa hàm. Mô tả một đệ quy bao gồm:

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Ngôn ngữ lập trình. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10783/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Ngôn ngữ lập trình' conversation and receive update notifications?

Ask