TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN LẬP TRÌNH HÀM Võ Trung Hùng rung... — Năm được các kỹ năng lập trình m Thực hiện báo cáo... l ài liệu tham khảo Giáo trình lập trình hà
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
LẬP TRÌNH HÀM
Võ Trung Hùng rung Vo- [rung@)ud.edu.vn
Trang 3— Năm được các kỹ năng lập trình
m Thực hiện báo cáo
Trang 4l ài liệu tham khảo
Giáo trình lập trình hàm (P.H Khánh) Revised Report on Algorithmic Language ocheme, Richard Kelsey, Wiliam Clinger
& Jonathan Rees
Teach Yourself Scheme in Fixnum Days, Doral Sitaram
PLT DrScheme : Programming Env
Manual, http://www.drscheme.org/
Trang 5Phan | Nguyên ly lập trình nhàm
Trang 6Đ)Inh nghĩa ngôn ngữ lập trinh
Trang 7Lập trình mệnh lệnh
m Sử dụng nguyên lý tinh chễ từng bước
m Khai báo dữ liệu : tên biên - kiêu
m Các kiêu dữ liệu cơ bản : so, ky tu
m Trạng thái trong (bộ nhớ, thanh ghi) thay đối
bang lenh gan
m Trạng thái ngoài (thiệt bị ngoại vi) thay đồi bởi
cac lénh vao ra
m Các câu trúc điêu khiên
m Dê có hiệu ứng phụ khi dùng CT con
Trang 8Cơ sở của các ngôn ngữ hàm (1)
m linh khai bao
— Ngôn ngữ mệnh lệnh :
begin GetData ( );
Trang 9Cơ SỞ của các ngôn ngữ hàm (2)
Dac diém
—LaNNLI bac cao trưu tượng hơn
— lt sử dụng các biên toàn cục
- Người sử dụng quan tâm đên việc định nghĩa
các ham toan học dê suy luận má không quan
tam dén van dé cai dat
— Ngôn ngữ Ele trinh ham dựa trên việc tinh toan
giá trị của biêu thức từ bên ngoài lời gọi hàm
— Một hàm có thê có hoặc không có đôi số
Trang 10Cơ sở của các ngôn ngữ hàm (3)
m Đặc điễm
— Két quả một hàm không phụ thuộc vào thời
điểm hàm được gọi
IX)+l{x)=2 "l{x) ˆ
— Không thê thay đối giá trị một phân tử của mảng
- Hạn chễ trong giao tiễp giữa hệ thông tương tác
vol HDH va NSD
Trang 11Cơ sở của các ngôn ngữ hàm (3)
= Cac khái niệm co’ ban trong LTH
— Ham (function)
— Dann sacn (list)
— Kiéu (type)
— Tính da kiéu (polymorphism)
— Cac ham bac cao (higher-order function)
— Tham đôi hoá từng phân (currying)
— Các hàm theo kiêu khôn ngoan (lazy-evalation)
— Phương trinh (equaftion)
Trang 12Ngon ngW Miranda
m Giới thiệu
— Do David Turner phat triên năm 1986
— Trinn thong dicn chnay tren Unix
- Đặc điềm : thuân tuý hàm
m L)ịnh nghĩa hàm
— Cu phap
<ten ham> ::<mién xac dinh> -><mien gia tri>
<tên hàm>[<danh sách tham đồi>]=<biêu thức> [<điêu
Kiện>|
Trang 13Ngon ngW Miranda
m L)ịnh nghĩa hàm
— Vi du : déi dé Fahrenheit > Celsius
celsius :: num -> num
celsius f = (f - 32)* 5/9
— Su dung:
celsius 636
> 20
Trang 16= |[-b/(2*a)| + radix/(2*a), otherwise
= [-b/(2*a)] - radix/(2*a), otherwise where delta=b"b-4*a*c and radix=sart delta
— Su dung:
ptbac2 2 1 -3
oe
H9
Trang 17i || danh sach rong
weekdays=[ Mon, lue, Wed, Ihur, Fri |
— Dạng nhận biết được : [body | qualifiers]
In | n <-[1 10] : n mod 2 = 1]
-> [1, 3,5, 7, 9]
Trang 20Ngon ngW Miranda
m hép so khớp
— Một hàm có thê định nghĩa bằng nhiêu biêu thức
vê phải khác nhau
- Cú pháp tổng quát :
<pattern> = <expression=>, <conadition>
— Vi du: tinh day Fibonacci
fid O = O HID 1= l fib (n+2) = fib (n+1) + fib n
Trang 22Ngon ngW Miranda
= Phuong phap currying (tham doi hoa tung onan - partial parametrization)
— Cho ham n bién : f(x,, X>, , X,)
— Có thê việt lại :
X4 >(X5 > (X >T(X, X,)) -))
— Mét ham nhiéu hon 1 tham déi thi có thê tham
đôi hoá từng phân
triple x =3*x
noac
triole = multi 3
Trang 23Ngon ngW Miranda
m Kiéu va tinh da kiéu (polymorphic)
— Các ngôn ngữ hàm thường không sử dụng định
ave
— Cho phep dinh nghĩa cac hàm đa kiêu với lời gọi
có các tham đôi có các kiêu dữ liệu khác nhau
Trang 24Ngon ngW Miranda
m Tinh ham theo kiéu kh6n ngoan
— lhông thường khi tính gia trị một ham, các tham
đôi được tính giá tri trước > tính giá trị của hàm
mult (fac 3) (fac 4) > mul 6 24 > 144
— Rut gon biéu thtrc > don gian hon : rut gọn theo
Trang 25Ngon ngW Miranda
m Tính hàm theo kiêu khôn ngoan
— VỊ dụ : tính fac với cond
fac n = cond (n=O) | (n * fac (n-1))
> nêu tham đồi thứ 3 luôn được tính thì hàm
trong Miranda chi tinh giá trị tham đôi khi cân
EX : fac 1 > cond (1=0) 1 (1*fac (1-1)) lÍ gọi fac
> |f (1=0) then 1 else (1*fac (1-1)) Il goi cond
> if false then 1 else (1*fac (1-1)) II tinh 1=O0 > 1*fac (1-1)
> 1*(cond (1-1=0) 1 ((1-1)*fac ((1-1)-1)))
_—>
Trang 27= quicksort fal a< Tail :a<x]
quicksort fal a< Tail :a>x]
EX | Quicksort |[5, 2, 9, 1]
> |1,2,5, 9]