Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
176,41 KB
Nội dung
TRƯ TRƯ Ờ Ờ NG Đ NG Đ Ạ Ạ I H I H Ọ Ọ C B C B Á Á CH KHOA CH KHOA KHOA KHOA CÔNG NGH CÔNG NGH Ệ Ệ THÔNG TIN THÔNG TIN LẬPTRÌNHHÀM Võ Võ Trung Trung H H ù ù ng ng Hung.Vo Hung.Vo - - Trung@ud.edu.vn Trung@ud.edu.vn N N ộ ộ i i dung dung Nguyên Nguyên lý lý l l ậ ậ p p tr tr ì ì nh nh h h à à m m Ngôn Ngôn ng ng ữ ữ Scheme Scheme Ki Ki ể ể u u d d ữ ữ li li ệ ệ u u ph ph ứ ứ c c h h ợ ợ p p K K ỹ ỹ thu thu ậ ậ t t x x ử ử lý lý h h à à m m C C ấ ấ u u tr tr ú ú c c d d ữ ữ li li ệ ệ u u Ph Ph ương ương ph ph á á p p Lý Lý thuy thuy ế ế t t – – N N ắ ắ m m đư đư ợ ợ c c m m ụ ụ c c đ đ í í ch ch t t ừ ừ ng ng n n ộ ộ i i dung dung – – C C á á ch ch th th ứ ứ c c ti ti ế ế n n h h à à nh nh – – Nh Nh ữ ữ ng ng v v ấ ấ n n đ đ ề ề c c ầ ầ n n lưu lưu ý ý Th Th ự ự c c h h à à nh nh – – Th Th ự ự c c h h à à nh nh c c á á c c n n ộ ộ i i dung dung đã đã h h ọ ọ c c – – N N ắ ắ m m đư đư ợ ợ c c c c á á c c k k ỹ ỹ năng năng l l ậ ậ p p tr tr ì ì nh nh Th Th ự ự c c hi hi ệ ệ n n b b á á o o c c á á o o T T à à i i li li ệ ệ u u tham tham kh kh ả ả o o Gi Gi á á o o tr tr ì ì nh nh l l ậ ậ p p tr tr ì ì nh nh h h à à m m (P.H. (P.H. Kh Kh á á nh nh ) ) Revised Report on Algorithmic Language Revised Report on Algorithmic Language Scheme, Scheme, Richard Kelsey, Richard Kelsey, Wiliam Wiliam Clinger Clinger & Jonathan Rees & Jonathan Rees Teach Yourself Scheme in Teach Yourself Scheme in Fixnum Fixnum Days, Days, Dorai Dorai Sitaram Sitaram PLT PLT DrScheme DrScheme : Programming : Programming Env Env . . Manual, http:// Manual, http:// www.drscheme.org www.drscheme.org / / Ph Ph ầ ầ n n I I Nguyên Nguyên lý lý l l ậ ậ p p tr tr ì ì nh nh h h à à m m Đ Đ ị ị nh nh ngh ngh ĩ ĩ a a ngôn ngôn ng ng ữ ữ l l ậ ậ p p tr tr ì ì nh nh B B ộ ộ ký ký t t ự ự (character set) (character set) B B ộ ộ t t ừ ừ v v ự ự ng ng (vocabulary) (vocabulary) – – T T ừ ừ kh kh ó ó a a – – Tên Tên , , đ đ ị ị nh nh danh danh – – Ph Ph é é p p to to á á n n – – . . C C ú ú ph ph á á p p (syntax) (syntax) Ng Ng ữ ữ ngh ngh ĩ ĩ a a (semantic) (semantic) L L ậ ậ p p tr tr ì ì nh nh m m ệ ệ nh nh l l ệ ệ nh nh S S ử ử d d ụ ụ ng ng nguyên nguyên lý lý tinh tinh ch ch ế ế t t ừ ừ ng ng bư bư ớ ớ c c Khai Khai b b á á o o d d ữ ữ li li ệ ệ u u : : tên tên bi bi ế ế n n - - ki ki ể ể u u C C á á c c ki ki ể ể u u d d ữ ữ li li ệ ệ u u cơ cơ b b ả ả n n : : s s ố ố , , ký ký t t ự ự . . Tr Tr ạ ạ ng ng th th á á i i trong trong ( ( b b ộ ộ nh nh ớ ớ , , thanh thanh ghi ghi ) ) thay thay đ đ ổ ổ i i b b ằ ằ ng ng l l ệ ệ nh nh g g á á n n Tr Tr ạ ạ ng ng th th á á i i ngo ngo à à i i ( ( thi thi ế ế t t b b ị ị ngo ngo ạ ạ i i vi) vi) thay thay đ đ ổ ổ i i b b ở ở i i c c á á c c l l ệ ệ nh nh v v à à o o ra ra C C á á c c c c ấ ấ u u tr tr ú ú c c đi đi ề ề u u khi khi ể ể n n D D ễ ễ c c ó ó hi hi ệ ệ u u ứ ứ ng ng ph ph ụ ụ khi khi d d ù ù ng ng CT con CT con Cơ Cơ s s ở ở c c ủ ủ a a c c á á c c ngôn ngôn ng ng ữ ữ h h à à m m (1) (1) T T í í nh nh khai khai b b á á o o – – Ngôn Ngôn ng ng ữ ữ m m ệ ệ nh nh l l ệ ệ nh nh : : begin begin GetData GetData ( .); ( .); ProcessData ProcessData ( .); ( .); OutputData OutputData ( .); ( .); end end – – Ngôn Ngôn ng ng ữ ữ l l ậ ậ p p tr tr ì ì nh nh h h à à m m (print (print (process (process - - data data (get (get - - data ( .)))) data ( .)))) Cơ Cơ s s ở ở c c ủ ủ a a c c á á c c ngôn ngôn ng ng ữ ữ h h à à m m (2) (2) Đ Đ ặ ặ c c đi đi ể ể m m – – L L à à NNLT NNLT b b ậ ậ c c cao cao tr tr ừ ừ u u tư tư ợ ợ ng ng hơn hơn – – Í Í t t s s ử ử d d ụ ụ ng ng c c á á c c bi bi ế ế n n to to à à n n c c ụ ụ c c – – Ngư Ngư ờ ờ i i s s ử ử d d ụ ụ ng ng quan quan tâm tâm đ đ ế ế n n vi vi ệ ệ c c đ đ ị ị nh nh ngh ngh ĩ ĩ a a c c á á c c h h à à m m to to á á n n h h ọ ọ c c d d ễ ễ suy suy lu lu ậ ậ n n m m à à không không quan quan tâm tâm đ đ ế ế n n v v ấ ấ n n đ đ ề ề c c à à i i đ đ ặ ặ t t – – Ngôn Ngôn ng ng ữ ữ l l ậ ậ p p tr tr ì ì nh nh h h à à m m d d ự ự a a trên trên vi vi ệ ệ c c t t í í nh nh to to á á n n gi gi á á tr tr ị ị c c ủ ủ a a bi bi ể ể u u th th ứ ứ c c t t ừ ừ bên bên ngo ngo à à i i l l ờ ờ i i g g ọ ọ i i h h à à m m – – M M ộ ộ t t h h à à m m c c ó ó th th ể ể c c ó ó ho ho ặ ặ c c không không c c ó ó đ đ ố ố i i s s ố ố Cơ Cơ s s ở ở c c ủ ủ a a c c á á c c ngôn ngôn ng ng ữ ữ h h à à m m (3) (3) Đ Đ ặ ặ c c đi đi ể ể m m – – K K ế ế t t qu qu ả ả m m ộ ộ t t h h à à m m không không ph ph ụ ụ thu thu ộ ộ c c v v à à o o th th ờ ờ i i đi đi ể ể m m h h à à m m đư đư ợ ợ c c g g ọ ọ i i f(x f(x ) + ) + f(x f(x ) = 2 * ) = 2 * f(x f(x ) ? ) ? – – Không Không th th ể ể thay thay đ đ ổ ổ i i gi gi á á tr tr ị ị m m ộ ộ t t phân phân t t ử ử c c ủ ủ a a m m ả ả ng ng – – H H ạ ạ n n ch ch ế ế trong trong giao giao ti ti ế ế p p gi gi ữ ữ a a h h ệ ệ th th ố ố ng ng tương tương t t á á c c v v ớ ớ i i HĐH HĐH v v à à NSD NSD [...]... ngữ hàm (3) Các khái niệm cơ bản trong LTH – Hàm (function) – Danh sách (list) – Kiểu (type) – Tính đa kiểu (polymorphism) – Các hàm bậc 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 trình (equation) Ngôn ngữ Miranda Giới thiệu – Do David Turner phát triển năm 1986 – Trình thông dịch chạy trên Unix – Đặc điểm : thuần tuý hàm. .. chạy trên Unix – Đặc điểm : thuần tuý hàm Định nghĩa hàm – Cú pháp :: -> []= [] Ngôn ngữ Miranda Định nghĩa hàm – Ví dụ : đổi độ Fahrenheit > Celsius celsius :: num -> num celsius f = (f - 32) * 5 / 9 – Sử dụng : celsius 68 > 20 Ngôn ngữ Miranda Định nghĩa hàm – Ví dụ : tính ước số chung lớn nhất gcd (greatest... Miranda – Ví dụ : tìm nghiệm phương trình bậc 2 ptbac2 a b c = error "PT vo nghiem", if delta 1 -1.5 Ngôn ngữ Miranda Danh sách – Đây là cấu trúc dữ liệu quan trọng nhất của các ngôn ngữ lậptrình hàm [1, 4, 9, 16] II danh sách gồm... parametrization) – Cho hàm n biến : f(x1, x2, , xn) – Có thể viết lại : x1 >(x2 > (xn >f(x1 xn)) )) – Một hàm nhiều hơn 1 tham đối thì có thể tham đối hoá từng phần triple x = 3 * x hoặc triple = multi 3 Ngôn ngữ Miranda Kiểu và tính đa kiểu (polymorphic) – Các ngôn ngữ hàm thường không sử dụng định kiểu – Cho phép định nghĩa các 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 – Ví... false] Ngôn ngữ Miranda Tính hàm theo kiểu khôn ngoan – Thông thường khi tính giá trị một hàm, các tham đối được tính giá trị trước > tính giá trị của hàm mult (fac 3) (fac 4) > mul 6 24 > 144 – Rút gọn biểu thức > đơn giản hơn : rút gọn theo thứ tự áp dụng mult (fac 3) (fac 4) > (fac 3) * (fac 4) – Ví dụ cond b x y = x, if b cond b x y = y, otherwise Ngôn ngữ Miranda Tính hàm theo kiểu khôn ngoan... danh sách 0 : [1, 3, 2, 5] > [0, 1, 3, 2, 5] Ngôn ngữ Miranda Danh sách – Viết lại một số hàm length L = 0, if L = [] length L = 1 + length (tl L), otherwise concat L1 L2 = L2, if L1 = [] concat L1 L2 = L1, if L2 = [] concat L1 L2 = (hd L1) : concat (tl L1) L2, otherwise Ngôn ngữ Miranda Phé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 : ... cond b x y = x, if b cond b x y = y, otherwise Ngôn ngữ Miranda Tính hàm theo kiểu khôn ngoan – Ví dụ : tính fac với cond fac n = cond (n = 0) 1 (n * fac (n-1)) > nếu tham đối thứ 3 luôn được tính thì hàm trong Miranda chỉ tính giá trị tham đối khi cần Ex : fac 1 > cond (1=0) 1 (1*fac (1-1)) II gọi fac > if (1=0) then 1 else (1*fac (1-1)) II gọi cond > if false then 1 else (1*fac (1-1)) II tính 1=0 . Á CH KHOA CH KHOA KHOA KHOA CÔNG NGH CÔNG NGH Ệ Ệ THÔNG TIN THÔNG TIN LẬP TRÌNH HÀM Võ Võ Trung Trung H H ù ù ng ng Hung.Vo Hung.Vo - - Trung@ud.edu.vn