NGÔ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ơ
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á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
NGÔ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
NGÔ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), ()
NGÔ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: (E
0
E
1
E
2
E
n
)
Một hàm mà
LISP đã biết
V
1
V
2
V
n
Áp dụng hàm E
0
lên tập V
1
, V
2
, V
n
giá trị biểu thức
định trị
định trị
định trị
NGÔN NGỮ LISP
Ví dụ: định trị biểu thức sau:
(+ 5 (* 2 3) (- 8 7) )
Hàm ‘+’
LISP đã biết
V
1
= 5 V
2
= 6
V
3
= 1
Áp dụng hàm + lên tập V
1
, V
2
, V
3
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)
NGÔN NGỮ LISP
Các hàm được định nghĩa trước trong 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))
NGÔN NGỮ LISP
Các hàm được định nghĩa trước trong 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 E
1
E
2
E
n
): trả về danh sách gồm các
phần tử là giá trị của các biểu thức E
1
, E
2
, , E
n
NGÔN NGỮ LISP
Các hàm được định nghĩa trước trong 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
NGÔN NGỮ LISP
Các hàm được định nghĩa trước trong LISP
Các hàm logic: AND, OR, NOT
Hàm (AND E
1
E
2
E
n
): đị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 E
n
Hàm (OR E
1
E
2
E
n
): đị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
NGÔN NGỮ LISP
Các hàm được định nghĩa trước trong 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
(ĐK
1
BT
1
)
(ĐK
2
BT
2
)
(ĐK
n
BT
n
)
(T BT
n+1
)
)
NGÔN NGỮ LISP
Hàm do người lập trình định nghĩa
Đị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