Bi?u t??ng hinh con th?n l?n đoi khi đ??c cac
l?p trinh vien
dung trong cac ch??ng trinh vi?t b?ng ngon ng? Lisp.
Lisp
la ngon ng? l?p trinh đ??c phat tri?n t? r?t s?m (
1958
). Lisp, vi?t t?t c?a
LISt Processing
co c?u truc d? li?u n?n t?ng la cac
danh sach lien k?t
(
linked list
). Lisp đ??c bi?t đ?n nh? m?t trong nh?ng
ngon ng?
l?p trinh ham
tieu bi?u, m?c du đoi khi v?n co cac
ch??ng trinh
Lisp đ??c vi?t theo h??ng
th? t?c
. V? hinh th?c,
cu phap
l?nh c?a Lisp r?t đ?c bi?t v?i nh?ng c?p ngo?c đ?n va vi?t theo
ky phap ti?n t?
.
Lisp đ??c
John McCarthy
đ? xu?t vao n?m 1958 t?i
MIT
. Steve Russell đa chuy?n t? y t??ng sang th?c t? tren may tinh.
Trinh bien d?ch
Lisp đ?u tien đ??c vi?t b?i Tim Hart va Mike Levin (
1962
) b?ng chinh ngon ng? Lisp.
Lisp đa đ??c s? d?ng r?ng rai trong l?nh v?c
tri tu? nhan t?o
.
- Cu phap thu?n nh?t (s? đ??c trinh bay trong ph?n d??i)
- Ham c?ng la m?t
đ?i t??ng
- L?p trinh ki?u đ?ng.
- Thu rac trong b? nh? (
Garbage collector
)
- Goi ch??ng trinh
- Bien d?ch t?ng d?n (
Incremental compiling
): Trong khi phat tri?n ch??ng trinh co th? s? d?ng cac ham đ??c
bien d?ch
cung v?i cac ham đ??c
thong d?ch
.
- Lisp co cu phap thu?n nh?t. C?u truc chung c?a Lisp la
danh sach lien k?t
bi?u th? b?i c?p ngo?c đ?n, ben trong la cac ph?n ng?n cach b?i d?u tr?ng (space).
(
ph?n-1
ph?n-2
ph?n-3...
)
Trong đo m?i ph?n co th? la:
Vi d?:
- Ham c?n b?c hai:
(sqrt 2)
- L?nh in ra man hinh:
(princ "Common Lisp")
- Phep tinh c?ng trong đo ham la toan t?:
(+ 3 5)
Cu phap nh? v?y đ??c g?i chung la
bi?u th?c S
(
S-expression
hay
Sexp
). M?t ch??ng trinh Lisp th?c ra la m?t bi?u th?c S l?n ma m?i ph?n c?a no g?m nhi?u bi?u th?c S con khac.
M?t s? cu phap c? th? c?a Lisp nh? sau:
- Khai bao ham
(
defun
ten-ham
(
danh-sach-tham-s?
)
(
n?i-dung-c?a-ham
))
- Gan
(
setq
ten-bi?n
gia-tr?
)
- Kh?i l?nh
(
progn
(
l?nh-1
)
(
l?nh-2
)
...
)
- Ch?n / r? nhanh
(
if
(
bi?u-th?c-đi?u-ki?n
)
(
nhanh-đung
)
(
nhanh-sai
))
(
cond
((
bi?u-th?c-1
)
(
nhanh-1
))
((
bi?u-th?c-2
)
(
nhanh-2
))
...
)
- L?p
(
while
(
đi?u-ki?n
)
(
l?nh
)
)
Trong th? vi?n chu?n c?a Lisp, cac ham d?ng logic (
predicate
) tr? l?i k?t qu? đung (
T
) ho?c sai (
NIL
) đ?u k?t thuc v?i ch? (
p
). Ch?ng h?n:
zerop
la ham ki?m tra m?t s? b?ng 0 hay khong.
Quy ??c đ?t ten nay khong b?t bu?c, no co tac d?ng v?i ng??i l?p trinh (đ? d? đ?c va ti?n
g? l?i
) nh?ng khong co y ngh?a v?i
trinh bien d?ch
.
H??ng đ?i t??ng trong Lisp
[
s?a
|
s?a ma ngu?n
]
M?c du đ??c phat tri?n v?i đ?nh h??ng ban đ?u la
l?p trinh ham
, ngon ng? Lisp c?ng đ??c b? sung cac tinh n?ng cho phep
l?p trinh h??ng đ?i t??ng
. Ch?ng h?n v?i
Common Lisp
, h??ng đ?i t??ng đ??c th? hi?n qua
CLOS
, v?i cac tinh n?ng c? b?n la
[1]
:
- đ?nh ngh?a cac l?p
- T?o cac đ?i t??ng trong m?i l?p
- đ?nh ngh?a cac ph??ng th?c va ham t?ng quat.
M?t vi d? c? th? v?i vi?c đ?nh ngh?a m?t l?p
person
v?i cac gia tr? m?c đ?nh ten la
bill
va 10 tu?i nh? sau:
(
defclass
person
()
((
name:accessor
person-name
:initform
'bill
:initarg:name
)
(
age:accessor
person-age
:initform
10
:initarg:age
)))
Trong qua trinh phat tri?n, co nhi?u dong Lisp khac nhau nh?:
MacLisp
,
ZetaLisp
,
Franz Lisp
v.v... V?i nguy?n v?ng th?ng nh?t m?t chu?n chung cho Lisp,
Common Lisp
(CL) đa ra đ?i. Tuy v?y, hi?n nay c?ng co nhi?u b?n c?a Common Lisp nh?
Allegro CL
,
LispWork
(cac phien b?n th??ng m?i), va
CMU CL
,
SBCL
(cac phien b?n t? do).
M?t nhanh phat tri?n khac c?a Lisp la
Scheme
, m?t
ngon ng? Lisp rut g?n
v?i vai thay đ?i v? cac
t? khoa
. Scheme la ngon ng? đ??c gi?ng d?y ph? bi?n t?i
Hoa K?
. Tr??ng
MIT
dung Scheme đ? d?y sinh vien n?m th? nh?t, nh?ng đa chuy?n qua dung
python
.
[2]
Sau khi ra đ?i, Lisp d?n d?n tr? thanh ngon ng? chuyen d?ng trong nganh tri tu? nhan t?o ? Hoa K?. Th?m chi ? Hoa K? ?nh h??ng c?a no con l?n at m?t ngon ng? thong d?ng khac trong nganh tri tu? nhan t?o la Prolog
[3]
. Nghien c?u tri tu? nhan t?o b?ng Lisp đ??c khai quat thanh nh?ng bai toan mang tinh m?u m?c
[4]
.
Ngoai ra Lisp con la cong c? l?p trinh m?nh m? ben trong cac ch??ng trinh
AutoCAD
va
Emacs
, va đ??c s? d?ng r?ng rai trong cong th??ng nghi?p
[5]
.
|
---|
Dung cho k? ngh?
| |
---|
Dung trong gi?ng d?y
| |
---|
Co gia tr? l?ch s?
| |
---|