Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 7: Ngôn ngữ lập trình hàm - Nguyễn Văn Hòa

Chương 7: Ngôn ngꢀ lꢁp  
trình hàm  
Giꢀng viên: Ph.D Nguyꢁn Văn Hòa  
Khoa KT-CN-MT – ðH An Giang  
1
Mꢂt sꢃ ñꢄc trưng cꢅa NN mꢆnh lꢆnh  
ꢀ Sꢂ dꢃng nguyên lý tinh chꢄ tꢅng bưꢆc, hay mꢇn  
dꢈn  
ꢀ Khai báo dꢉ liꢊu ñꢋ nꢌi kꢄt tên biꢄn → trꢇ  
ꢀ Các kiꢋu dꢉ liꢊu cơ bꢀn → kiꢋu dꢉ liꢊu có cꢍu  
trúc  
ꢀ Cꢍu trúc ñiꢎu khiꢋn tꢅng tꢏ, rꢐ nhánh, gꢑi chương  
trình con  
ꢀ Hiꢊu ꢒng lꢎ  
ꢀ Lꢓp trình cꢍu trúc: khꢌi, chương trình con,  
module  
2
Nꢂi dung chính cꢅa chương  
ꢀ Giꢆi thiꢊu  
ꢀ Hàm toán hꢑc  
ꢀ Dꢔng hàm  
ꢀ Bꢀn chꢍt cꢕa lꢓp trình hàm  
ꢀ Ngôn ngꢉ LISP  
3
Giꢇi thiꢆu  
ꢀ Ngôn ngꢉ lꢓp trình mꢊnh lꢊnh ñưꢖc xây dꢏa trên  
nguyên lý kiꢄn trúc máy tính cꢕa von Neumann  
ꢁ ðơn trꢇ làm viꢊc trong chương trình là câu lꢊnh  
ꢁ Các NNLT Fortran, Pascal, Ada… sꢏ hiꢊu quꢀ quan  
trꢑng hơn là sꢏ thích hꢖp ñꢋ phát triꢋn phꢈn mꢎm  
ꢀ Ngôn ngꢉ lꢓp trình hàm (LTH) ñưꢖc xây dꢏng  
dꢏa trên các hàm toán hꢑc → ngôn ngꢉ không ra  
lꢊnh  
ꢁ Vì dꢏa trên nguyên lý hàm toán hꢑc nên LTH gꢈn gꢕi  
vꢆi ngưꢗi dùng hơn, nhưng LTH thì không liên hꢊ chꢘt  
chꢐ vꢆi kiꢄn trúc máy tính  
4
Hàm toán hꢈc  
ꢀ Mꢙi hàm toán hꢑc là mꢚt ánh xꢔ các phꢈn tꢂ cꢕa  
tꢓp hꢖp (miꢎn xác ñꢇnh) vꢆi các phꢈn tꢂ cꢕa tꢓp  
hꢖp khác (miꢎn giá trꢇ)  
ꢀ Mꢙi phꢈn tꢂ cꢕa miꢎn xác ñꢇnh tương ꢒng mꢚt  
phꢈn tꢂ cꢕa miꢎn giá trꢇ  
ꢀ Mꢙi ñꢇnh nghĩa hàm xác ñꢇnh miꢎn xác ñꢇnh,  
miꢎn giá trꢇ và quy tꢛc tương tác (ánh xꢔ)  
ꢀ ðꢇnh nghĩa hàm  
ꢁ Tên hàm + danh sách tham sꢌ ≡ biꢋu thꢒc  
ꢁ VD lap_phuong(x) ≡ x*x*x ;  
5
Biꢉu thꢊc lambda  
ꢀ ðôi khi ngưꢗi ta dùng hàm không tên → sꢂ dꢃng  
biꢋu thꢒc lambda  
ꢁ VD λ(x) x * x * x thay thꢄ lap_phuong(x) ≡  
x*x*x  
ꢀ Tham sꢌ biꢋu thꢒc lambda gꢑi là tham sꢌ biꢄn kꢄt  
ghép  
ꢀ Khi biꢋu thꢒc lambda ñưꢖc ñꢇnh trꢇ ñꢌi vꢆi mꢚt  
tham sꢌ ñã cho → biꢋu thꢒc ñưꢖc áp dꢃng cho  
tham sꢌ ñó  
ꢁ (λ(x) x * x * x)(2)có giá trꢇ là 8  
6
Ngôn ngꢀ lꢁp trình hàm  
ꢀ Tꢓp hꢖp các ñꢌi tưꢖng dꢉ liꢊu  
ꢀ Các hàm nguyên thꢕy  
ꢀ Các dꢔng hàm  
ꢀ Tác vꢃ áp dꢃng hàm  
7
ðꢃi tưꢋng dꢀ liꢆu  
ꢀ ðꢌi tưꢖng dꢉ liꢊu cꢕa ngôn ngꢉ lꢓp trình hàm rꢍt  
ñơn giꢀn  
ꢁ Nguyên tꢂ (Atom): mꢚt chuꢙi các ký tꢏ; ABC, 123, Z34  
ꢁ Hai nguyên tꢂ ñꢘc biꢊt: T và F  
ꢁ Dãy n các ñꢌi tưꢖng x1, x2, …, xn ñưꢖc ký hiꢊu là < x1,  
x2, …, xn>  
ꢁ NIL là ký hiꢊu dãy rꢙng  
8
Hàm nguyên thꢅy  
ꢀ Là các hàm ñưꢖc ñꢇnh nghĩa sꢜn trong ngôn ngꢉ  
ꢀ Bón nhóm dꢔng hàm nguyên thꢕy  
ꢁ Nhóm hàm sꢌ hꢑc: +, -,*, /  
ꢁ Nhóm hàm vꢇ tꢅ: ATOM và NULL  
ꢁ Hàm ñꢝng nhꢍt ID:x ≡ x  
ꢁ Nhóm liên quan ñꢄn cꢍu trúc danh sánh (dãy)  
9
Dꢌng hàm  
ꢀ Dꢔng hàm là sꢏ tꢞ hꢖp cꢕa các hàm: mꢚt hàm  
(chương trình) ñưꢖc xây dꢏng tꢅ các hàm sꢜn có  
bꢟng cách sꢂ dꢃng các tác vꢃ tꢔo chương trình  
ꢀ Các dꢔng hàm  
ꢁ Hàm hꢖp  
ꢁ Hàm xây dꢏng  
ꢁ Hàm áp dꢃng cho tꢍt cꢀ  
10  
Hàm hꢋp (composition)  
ꢀ Hàm hꢖp là hàm dùng 2 hàm như là 2 tham sꢌ và  
dùng kꢄt quꢀ cꢕa hàm ñꢈu tiên như là tham sꢌ  
thꢏc cho hàm thꢒ 2  
ꢀ VD hàm hꢖp cꢕa h  
h ≡ f ° g  
nghĩa là h(x) ≡ f ( g ( x))  
Nꢄu f (x) ≡ x + 2 và g (x) ≡ 3 * x,  
h ≡ f ° g tương ñương (3 * x)+ 2  
11  
Hàm xây dꢍng (construction)  
ꢀ Hàm xây dꢃng là hàm mà các tham sꢌ cꢕa chúng  
cũng là hàm  
ꢀ Ký hiꢊu hàm xây dꢏng: []  
ꢀ Khi áp dꢃng vào mꢚt ñꢌi sꢌ vào hàm xây dꢏng:  
ñꢌi sꢌ ñưꢖc áp dꢃng vào hàm tham sꢌ → tꢓp hꢖp  
kꢄt quꢀ  
ꢀ VD  
ꢁ G(x) ≡ x*x, H(x) ≡ 2*x và I(x) ≡ x/2  
ꢁ [G,H,I](4) có kꢄt quꢀ là (16,8,2)  
12  
Áp dꢎng cho tꢏt cꢐ  
ꢀ Là hàm lꢍy mꢚt hàm ñơn như là mꢚt tham sꢌ  
ꢀ Hàm áp dꢃng cho tꢍt cꢀ ñưꢖc ký hiꢊu là α  
ꢀ Áp dꢃng hàm tham sꢌ vào danh sách các ñꢌi sꢌ,  
ta ñưꢖc mꢚt danh sách kꢄt quꢀ  
ꢀ VD h (x) ≡ x * x  
α( h, (2, 3, 4)) kꢄt quꢀ (4, 9, 16)  
13  
Bꢐn chꢏt cꢅa NN lꢁp trình hàm  
ꢀ Mꢃc ñích cꢕa viꢊc thiꢄt kꢄ NN LTH là mô phꢠng  
các hàm toán hꢑc mꢚt cách nhiꢎu nhꢍt có thꢋ  
ñưꢖc  
ꢀ Tiꢄn trình tính toán trong NN LTH khác NN LT  
mꢊnh lꢊnh:  
ꢁ Trong LT mꢊnh lꢊnh, biꢋu thꢒc ñưꢖc ñꢇnh giá và kꢄt  
quꢀ cꢕa nó ñưꢖc lưu trꢉ trong ô nhꢆ  
ꢁ Quꢀn lý biꢄn là 1 trong nhꢉng nhân tꢌ làm phꢒc tꢔp  
NNLT mꢊnh lꢊnh  
ꢀ Trong NN LTH, biꢄn không cꢈn thiꢄt, như là  
trong trưꢗng hꢖp cꢕa toán hꢑc  
14  
Bꢐn chꢏt cꢅa NN lꢁp trình hàm (tt)  
ꢀ Các lꢊnh lꢓp lꢔi sꢐ ñưꢖc xꢂ lý bꢟng ñꢊ qui  
ꢀ Chương trình là các ñꢇnh nghĩa hàm và các áp  
dꢃng hàm  
ꢀ Sꢏ thꢏc hiꢊn là viꢊc ñánh giá các áp dꢃng hàm  
ꢀ Sꢏ thꢏc hiꢊn mꢚt hàm luôn cho cùng mꢚt kꢄt quꢀ  
khi ta cho nó cùng mꢚt ñꢌi sꢌ  
ꢁ VD f(x) + f(x) và 2 * f(x) luôn luôn cùng kꢄt quꢀ  
ꢀ Ngꢉ nghĩa cꢕa ngôn ngꢉ lꢓp trình hàm ñơn giꢀn  
hơn ngꢉ nghĩa cꢕa ngôn ngꢉ lꢓp trình mꢊnh lꢊnh  
15  
Bꢐn chꢏt cꢅa NN lꢁp trình hàm (tt)  
ꢀ Ngôn ngꢉ hàm cung cꢍp mꢚt tꢓp hꢖp các hàm  
nguyên thꢕy và mꢚt tꢓp các dꢔng hàm  
ꢀ Ngoài còn cung cꢍp mꢚt phép toán áp dꢃng hàm  
và các cꢍu trúc lưu trꢉ dꢉ liꢊu  
ꢀ Ngôn ngꢉ hàm ñưꢖc thiꢄt kꢄ tꢌt là LISP  
16  
NN biên dꢑch vs NN thông dꢑch  
17  
LISP: giꢇi thiꢆu  
ꢀ Ðưꢖc John McCarthy ñꢎ xuꢍt vào năm 1958  
ꢀ Trình biên dꢇch LISP ñꢈu tiên ñưꢖc viꢄt bꢡi Tim  
Hart và Mike Levin (1962) bꢟng chính ngôn ngꢉ  
LISP  
ꢀ LISP là mꢚt trong nhꢉng ngôn ngꢉ LT sꢆm nhꢍt  
ꢀ LISP ñã ñưꢖc sꢂ dꢃng rꢚng rãi và phát triꢋn mꢔnh  
trong lĩnh vꢏc trí tuꢊ nhân tꢔo trong 1980s  
ꢀ Common Lisp chuꢢn ra ñꢗi năm 1984  
18  
Ưu ñiꢉm cꢅa LISP  
ꢀ Cú pháp ñơn giꢀn  
ꢁ Cꢍu trúc dꢉ liꢊu duy nhꢍt: danh sách  
ꢁ Không có lꢊnh, không tꢅ khóa  
ꢁ Tꢍt cꢀ các hàm ñꢎu viꢄt ꢡ dꢔng hàm  
ꢀ Là mꢚt ngôn ngꢉ mꢔnh nhꢗ tính tương ñương  
giꢉa dꢉ liꢊu và chương trình  
ꢀ Mꢎm dꢣo và dꢁ phát triꢋn  
19  
Các khái miꢆn cơ bꢐn  
ꢀ Nguyên tꢂ (Atom): là mꢚt ñꢌi tưꢖng cơ bꢀn cꢕa  
LISP, nguyên tꢂ có thꢋ là sꢌ hoꢘc ký hiꢊu  
ꢁ Sꢌ: giꢌng như trong các NNLT khác như Pascal, C…  
VD : các hꢟng sꢌ 5, -20, 10.45, 18.2E+5  
ꢁ Ký hiꢊu (symbol): là chuꢙi các ký tꢏ (trꢅ các ký tꢏ ñꢘc  
biꢊt, dꢍu ngoꢘc & khoꢀng trꢌng)  
ꢀ
ꢀ
ꢀ
Các ký hiꢊu ñưꢖc bꢛt ñꢈu băng dꢍu «‘»  
VD ‘a, ‘anh, ‘anh_ba  
Ký hiꢊu sꢌ ñưꢖc xem là sꢌ; VD ‘5 = 5  
20  
Tải về để xem bản đầy đủ
pdf 49 trang myanh 25260 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 7: Ngôn ngữ lập trình hàm - Nguyễn Văn Hòa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_7_ngon_ngu_lap.pdf