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 đủ
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:
bai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_7_ngon_ngu_lap.pdf

