NGÔN NGỮ LẬP TRÌNH HÀMBộ môn Công nghệ phần mềm Khoa Công nghệ thông tin & Truyền thông Đại học Cần Thơ... NGÔN NGỮ LẬP TRÌNH HÀM Ngôn ngữ lập trình hàm được thiết kế dựa trên các hàm to
Trang 1NGÔN NGỮ LẬP TRÌNH HÀM
Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin & Truyền thông Đại học Cần Thơ
Trang 2NGÔN NGỮ LẬP TRÌNH HÀM
Ngôn ngữ lập trình hàm được thiết kế dựa trên các hàm toán học (ngôn ngữ không ra
lệnh)
Hàm là một sự tương ứng giữa các phần tử
của một tập hợp (miền xác định) với các
phần tử của một tập hợp khác (miền giá trị)
Bản chất ngôn ngữ lập trình hàm: mô phỏng các hàm toán học; chương trình là các định nghĩa hàm và áp dụng hàm; thực hiện
chương trình là đánh giá các áp dụng hàm
Trang 3NGÔN NGỮ LISP
Ðược J MAC CARTHY viết năm 1958
Sử dụng nhiều trong lĩnh vực trí tuệ nhân tạo
Cú pháp đơn giản, chỉ có cấu trúc danh sách
(List Processing Language)
Là một ngôn ngữ mạnh, mềm dẻo
Trang 4NGÔN NGỮ LISP
Nguyên tử (atom): đối tượng cơ bản của
LISP, có thể là số hay ký hiệu
S ố : vi ế t ở h ệ th ậ p phân, có th ể là s ố th ự c, s ố
nguyên Ví d ụ : 15, -20, 18.25, 172.4E+3
Ký hi ệ u (symbol): chu ỗ i các ký t ự (tr ừ ký t ự đặ c
bi ệ t, d ấ u ngo ặ c, kho ả ng tr ố ng) Ví d ụ : tong, a, ds
Danh sách: dãy có th ứ t ự của các phần tử
cách nhau ít nhất một khoảng trống và đặt
nằm trong cặp dấu ngoặc đơn Phần tử của danh sách có thể là một nguyên tử hoặc là
một danh sách Ví dụ: (1 2), (+ 2 3), (2 a), ()
Trang 5NGÔN NGỮ LISP
Biểu thức: là một nguyên tử hoặc một danh sách
Quy tắc định trị biểu thức:
S ố : giá tr ị là chính s ố đ ó
Ký hi ệ u: giá tr ị quy đị nh tr ướ c c ủ a LISP ho ặ c giá
tr ị c ủ a ng ườ i dùng đ ã gán cho ký hi ệ u
Danh sách: ( E0 E1 E2 En)
V1 V2 Vn
Áp d ụ ng hàm E0 lên t ậ p V1, V2, Vn giá tr ị bi ể u th ứ c
Trang 6NGÔN NGỮ LISP
Ví dụ: định trị biểu thức sau:
(+ 5 (* 2 3) (- 8 7) )
Hàm ‘+’
V1 = 5 V2 = 6 V3 = 1
Áp d ụ ng hàm + lên t ậ p V1, V2, V3 giá tr ị bi ể u th ứ c = 5+6+1 = 12
Chú ý: LISP luôn cố gắng thực hiện định trị
biểu thức Nếu muốn LISP không định trị,
phải dùng hàm quote hoặc ký hiệu nháy đơn
‘ trước biểu thức Ví dụ: ‘(+ 5 3), ‘tong, ‘(a b)
Trang 7NGÔN NGỮ LISP
Hàm số học: làm việc trên số và trả về kết
quả số Một số hàm cơ bản: +, -, *, /, 1+, 1-
Ví dụ: (+ 2 3), (1+ 5)
Hàm so sánh: thực hiện so sánh, trả về T
(đúng) hoặc NIL (sai)
So sánh s ố : <, <=, >, >=, = Ví d ụ : (< 5 7)
So sánh b ằ ng dùng cho 2 nguyên t ử : eq Ví d ụ : (eq 2 3), (eq ‘tuong ‘duong)
So sánh b ằ ng dùng cho 2 đố i t ượ ng b ấ t k ỳ : equal
Ví d ụ : (equal 3 5), (equal ‘(a b) ‘(1 2))
Trang 8NGÔN NGỮ LISP
Hàm xử lý danh sách: CAR, CDR, CONS,
LIST
Hàm (CAR L): tr ả v ề ph ầ n t ử đầ u tiên c ủ a danh sách L
Hàm (CDR L): tr ả v ề danh sách sau khi b ỏ đ i
ph ầ n t ử đầ u tiên trong danh sách L
Hàm (CONS x L): tr ả v ề danh sách sau khi thêm
ph ầ n t ử x vào đầ u danh sách L
Hàm (LIST E1 E2 En): tr ả v ề danh sách g ồ m các
ph ầ n t ử là giá tr ị c ủ a các bi ể u th ứ c E1, E2, , En
Trang 9NGÔN NGỮ LISP
Các hàm kiểm tra: atom, numberp, symbolp, listp
Hàm (atom x): tr ả v ề t n ế u x là m ộ t nguyên t ử ,
ng ượ c l ạ i tr ả v ề nil
Hàm (numberp x): tr ả v ề t n ế u x là s ố , ng ượ c l ạ i
tr ả v ề nil
Hàm (symbolp x): tr ả v ề t n ế u x là ký hi ệ u , ng ượ c
l ạ i tr ả v ề nil
Hàm (listp x): tr ả v ề t n ế u x là danh sách , ng ượ c
l ạ i tr ả v ề nil
Trang 10NGÔN NGỮ LISP
Các hàm logic: AND, OR, NOT
Hàm (AND E1 E2 En): đị nh tr ị các bi ể u th ứ c t ừ
trái sang ph ả i N ế u g ặ p m ộ t bi ể u th ứ c là NIL thì
d ừ ng và cho k ế t qu ả là NIL N ế u t ấ t c ả các bi ể u
th ứ c đề u khác NIL thì l ấ y giá tr ị c ủ a bi ể u th ứ c En
Hàm (OR E1 E2 En): đị nh tr ị các bi ể u th ứ c t ừ
trái sang ph ả i N ế u g ặ p m ộ t bi ể u th ứ c khác NIL thì d ừ ng và l ấ y k ế t qu ả c ủ a bi ể u th ứ c đ ó N ế u t ấ t
c ả bi ể u th ứ c là NIL thì k ế t qu ả là NIL
Hàm (NOT E): tr ả v ề NIL n ế u giá tr ị c ủ a E khác NIL, ng ượ c l ạ i tr ả v ề T
Trang 11NGÔN NGỮ LISP
Hàm rẽ nhánh khiển: (IF E1 E2 E3), nếu E1 khác NIL trả về kết quả E2, ngược lại trả về E3
Hàm lựa chọn: (COND
(ĐK1 BT1) (ĐK2 BT2)
(ĐKn BTn) (T BTn+1) )
Trang 12NGÔN NGỮ LISP
Định nghĩa hàm:
(defun <tên hàm>(danh sách các tham số)
<biểu thức>
)
Gọi hàm: (tên hàm tham số)
Ví dụ: (defun bp(n)
(* n n) )
(bp 5) = 25