1. Trang chủ
  2. » Giáo Dục - Đào Tạo

GIÁO TRÌNH LẬP TRÌNH HÀM VÀ LẬP TRÌNH LÔGIC

201 70 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 201
Dung lượng 1,53 MB

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CƠNG NGHỆ THƠNG TIN GIÁO TRÌNH LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC PGS.TS PHAN HUY KHÁNH biên soạn ĐÀ NẴNG 3/2009 LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC Mục lục CHƯƠNG I II III IV CHƯƠNG I II III CÁC NGƠN NGỮ LẬP TRÌNH MỞ ĐẦU VỀ NGƠN NGỮ LẬP TRÌNH I.1 Vài nét lịch sử .5 I.2 Định nghĩa ngơn ngữ lập trình I.3 Khái niệm chương trình dịch PHÂN LOẠI CÁC NGÔN NGỮ LẬP TRÌNH NGƠN NGỮ LẬP TRÌNH MỆNH LỆNH 11 CƠ SỞ CỦA CÁC NGÔN NGỮ HÀM 12 NGÔN NGỮ SCHEME 17 GIỚI THIỆU SCHEME 17 CÁC KIỂU DỮ LIỆU CỦA SCHEME 18 II.1 Các kiểu liệu đơn giản .18 II.1.1 Kiểu số 18 II.1.2 Kiểu lơgích vị từ 20 II.1.3 Ký hiệu 21 II.2 Khái niệm biểu thức tiền tố .23 II.3 S-biểu thức 24 CÁC ĐỊNH NGHĨA TRONG SCHEME 25 III.1 Định nghĩa biến .25 III.2 Định nghĩa hàm .26 III.2.1 Khái niệm hàm Scheme 26 III.2.2 Gọi hàm sau định nghĩa 26 III.2.3 Sử dụng hàm bổ trợ 27 III.2.4 Tính khơng định kiểu Scheme 28 III.3 Cấu trúc điều khiển .29 III.3.1 Dạng điều kiện if 29 III.3.2 Biến cục 30 III.3.3 Định nghĩa vị từ 32 III.4 Sơ đồ đệ quy sơ đồ lặp .33 III.4.1 Sơ đồ đệ quy 33 III.4.2 Ví dụ 34 III.4.3 Tính dừng lời gọi đệ quy 36 III.4.4 Chứng minh tính dừng 37 III.4.5 Sơ đồ lặp 37 III.5 Vào/ra liệu 39 III.6 Kiểu liệu phức hợp 40 III.6.1 Kiểu chuỗi 40 III.6.2 Kiểu liệu vectơ 43 III.6.3 Khái niệm trừu tượng hoá liệu 43 III.6.4 Định nghĩa đôi 45 III.6.5 Đột biến đôi 47 III.6.6 Ứng dụng đôi 47 III.7 Kiểu liệu danh sách 52 III.7.2 Dạng case xử lý danh sách 62 LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC III.8 III.9 III.10 III.11 III.12 III.13 CHƯƠNG I II III III.7.3 Kỹ thuật đệ quy xử lý danh sách phẳng 64 III.7.4 Kỹ thuật đệ quy xử lý danh sách 67 Biểu diễn danh sách 70 III.8.1 Biểu diễn danh sách kiểu đôi 70 III.8.2 Danh sách kết hợp 73 III.8.3 Dạng quasiquote 76 Một số ví dụ ứng dụng danh sách .77 Sử dụng hàm .80 III.10.1 Dùng tên hàm làm tham đối 81 III.10.2 Áp dụng hàm cho phần tử danh sách 83 III.10.3 Kết trả hàm 85 Phép tính lambda .86 III.11.1 Giới thiệu phép tính lambda 86 III.11.2 Biễu diễn biểu thức lambda Scheme 87 III.11.3 Định nghĩa hàm nhờ lambda 88 III.11.4 Kỹ thuật sử dụng phối hợp lambda 90 III.11.5 Định nghĩa hàm nhờ tích luỹ kết 93 III.11.6 Tham đối hoá phần 95 III.11.7 Định nghĩa đệ quy cục 95 Xử lý hàm 97 III.12.1 Xây dựng phép lặp 97 III.12.2 Trao đổi thông điệp hàm 99 III.12.3 Tổ hợp hàm 101 III.12.4 Các hàm có số lượng tham đối 102 Một số ví dụ 104 III.13.1 Phương pháp xấp xỉ liên tiếp 104 III.13.2 Tạo thủ tục định dạng 105 III.13.3 Xử lý đa thức 106 III.13.4 Thuật toán quay lui 111 NGÔN NGỮ PROLOG 122 GIỚI THIỆU NGÔN NGỮ PROLOG 122 I.1 Prolog ngơn ngữ lập trình lơgich 122 I.1.1 Cú pháp Prolog 123 I.1.2 Các thuật ngữ 123 I.1.3 Các kiểu liệu Prolog 123 I.1.4 Chú thích 124 I.2 Các kiểu liệu sơ cấp Prolog 124 I.2.1 Kiểu số 124 I.2.2 Kiểu lôgich 125 I.2.3 Kiểu chuỗi ký tự 125 I.2.4 Kiểu nguyên tử 125 I.2.5 Biến 125 SỰ KIỆN VÀ LUẬT TRONG PROLOG 125 II.1 Xây dựng kiện 125 II.2 Xây dựng luật 128 II.2.1 Định nghĩa luật 128 II.2.2 Định nghĩa luật đệ quy 132 II.2.3 Sử dụng biến Prolog 135 KIỂU DỮ LIỆU CẤU TRÚC CỦA PROLOG 136 III.1 Định nghĩa kiểu cấu trúc Prolog 136 III.2 So sánh hợp hạng 138 LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC IV V VI VII VIII IX X QUAN HỆ GIỮA PROLOG VÀ LƠGICH TỐN HỌC 141 IV.1 Các mức nghĩa chương trình Prolog 142 IV.2 Nghĩa khai báo chương trình Prolog 142 IV.3 Khái niệm gói mệnh đề 143 IV.4 Nghĩa lôgich mệnh đề 144 IV.5 Nghĩa thủ tục Prolog 145 IV.6 Tổ hợp yếu tố khai báo thủ tục 152 VÍ DỤ : CON KHỈ VÀ QUẢ CHUỐI 153 V.1 Phát biểu toán 153 V.2 Giải toán với Prolog 154 V.3 Sắp đặt thứ tự mệnh đề đích 157 V.3.1 Nguy gặp vòng lặp vơ hạn 157 V.3.2 Thay đổi thứ tự mệnh đề đích chương trình 159 SỐ HỌC 162 VI.1 Các phép toán số học 162 VI.2 Biểu thức số học 162 VI.3 Định nghĩa phép toán Prolog 164 VI.4 Các phép so sánh số học 168 VI.5 Các phép so sánh hạng 169 VI.6 Vị từ xác định kiểu 170 VI.7 Một số vị từ xử lý hạng 171 ĐỊNH NGHĨA HÀM 172 VII.1 Định nghĩa hàm sử dụng đệ quy 172 VII.2 Tối ưu phép đệ quy 179 VII.3 Một số ví dụ khác đệ quy 180 VII.3.1 Tìm đường đồ thị có định hướng 180 VII.3.2 Tính độ dài đường đồ thị 181 VII.3.3 Tính gần chuỗi 181 BIỂU DIỄN CẤU TRÚC DANH SÁCH 182 MỘT SỐ VỊ TỪ XỬ LÝ DANH SÁCH CỦA PROLOG 184 CÁC THAO TÁC CƠ BẢN TRÊN DANH SÁCH 185 X.1 Xây dựng lại số vị từ có sẵn 185 X.1.1 Kiểm tra phần tử có mặt danh sách 185 X.1.2 Ghép hai danh sách 186 X.1.3 Bổ sung phần tử vào danh sách 189 X.1.4 Loại bỏ phần tử khỏi danh sách 189 X.1.5 Nghịch đảo danh sách 190 X.1.6 Danh sách 190 X.1.7 Hoán vị 191 X.2 Một số ví dụ danh sách 192 X.2.1 Sắp xếp phần tử danh sách 192 X.2.2 Tính độ dài danh sách 193 X.2.3 Tạo sinh số tự nhiên 194 LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC CHƯƠNG CÁC NGƠN NGỮ LẬP TRÌNH I Mở đầu ngơn ngữ lập trình I.1 Vài nét lịch sử Buổi ban đầu N hững ngơn ngữ lập trình (programming language) máy tính điện tử ngơn ngữ máy (machine language), tổ hợp số hệ hai, hay hệ nhị phân, hay bit (viết tắt binary digit) Ngơn ngữ máy phụ thuộc hồn tồn vào kiến trúc phần cứng máy tính quy ước khắt khe nhà chế tạo Để giải tốn, người lập trình phải sử dụng tập hợp lệnh điều khiển sơ cấp mà lệnh tổ hợp số hệ hai nên gặp nhiều khó khăn, mệt nhọc, dễ mắc phải sai sót, lại khó sửa lỗi Từ năm 1950, để giảm nhẹ việc lập trình, người ta đưa vào kỹ thuật chương trình (sub-program hay sub-routine) xây dựng thư viện chương trình (library) để cần gọi đến dùng lại đoạn chương trình viết Ngơn ngữ máy tiến gần đến ngôn ngữ tự nhiên Cũng từ năm 1950, ngôn ngữ hợp dịch, hay hợp ngữ (assembly) hay gọi ngơn ngữ biểu tượng (symbolic) đời Trong hợp ngữ, mã lệnh địa toán hạng thay từ tiếng Anh gợi nhớ (mnemonic) ADD, SUB, MUL, DIV, JUMP tương ứng với phép toán số học + - × /, phép chuyển điều khiển, v.v Do máy tính hiểu ngơn ngữ máy, chương trình viết hợp ngữ chạy mà phải qua giai đoạn hợp dịch (assembler) thành ngôn ngữ máy Tuy nhiên, hợp ngữ phụ thuộc vào phần cứng xa lạ với ngôn ngữ tự nhiên (natural language), người lập trình gặp nhiều khó khăn giải tốn máy tính Năm 1957, hãng IBM đưa ngôn ngữ FORTRAN (FORmula TRANslator) Đây ngơn ngữ lập trình gần gũi ngơn ngữ tự nhiên với cách diễn đạt tốn học FORTRAN cho phép giải nhiều loại toán khoa học, kỹ thuật sau nhanh chóng ứng dụng rộng rãi ngày với kho tàng thư viện thuật toán đồ sộ tiện dụng Tiếp theo đời ngôn ngữ ALGOL 60 (ALGOrithmic Language) năm 1960, COBOL (Comon Business Oriented Language) năm 1964, Simula năm 1964, v.v Phát triển ngơn ngữ lập trình Theo phát triển hệ máy tính, ngơn ngữ lập trình khơng ngừng cải tiến hồn thiện để ngày đáp ứng nhu cầu người sử dụng giảm nhẹ cơng việc lập trình Rất nhiều ngơn ngữ lập trình đời tảng lý thuyết tính tốn (theory of computation) hình thành hai loại ngơn ngữ : ngơn ngữ bậc thấp ngôn ngữ bậc cao Các ngôn ngữ bậc thấp (low-level language), hợp ngữ ngôn ngữ máy, thường dùng để viết chương trình điều khiển kiểm tra thiết bị, chương trình sửa lỗi (debugger) hay cơng cụ LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC Các ngơn ngữ lập trình bậc cao (high-level language) phương tiện giúp người làm tin học giải vấn đề thực tế đồng thời nơi mà thành tựu nghiên cứu khoa học máy tính đưa vào Lĩnh vực nghiên cứu phát triển ngơn ngữ lập trình vừa có tính truyền thống, vừa có tính đại Ngày nay, với tiến khoa học công nghệ, người ta sử dụng cơng cụ hình thức cho phép giảm nhẹ cơng việc lập trình từ lúc phân tích, thiết kế sử dụng ngơn ngữ lập trình I.2 Định nghĩa ngơn ngữ lập trình Các ngơn ngữ lập trình bậc cao xây dựng mô ngôn ngữ tự nhiên, thường tiếng Anh (hoặc tiếng Nga năm trước đây) Định nghĩa ngơn ngữ lập trình định nghĩa văn phạm (grammar) để sinh câu ngơn ngữ Có thể hình dung văn phạm gồm bốn thành phần : ký tự, từ vựng, cú pháp ngữ nghĩa Bộ ký tự (character set) Gồm số hữu hạn ký tự (hay ký hiệu) phép dùng ngôn ngữ Trong máy tính cá nhân, người ta thường sử dụng ký tự ASCII Có thể hiểu ký tự có vai trò bảng chữ (alphabet) ngôn ngữ tự nhiên để tạo từ (word) Bộ từ vụng (vocabulary) Gồm tập hợp từ, hay đơn vị từ vựng (token), xây dựng từ ký tự Các từ dùng để tạo thành câu lệnh chương trình phân loại tuỳ theo vai trò chức chúng ngơn ngữ Chẳng hạn chương trình Pascal sau : program P; var ×, y : integer; begin read(x); y:=x+2; write(y) end gồm đơn vị từ vựng : Từ khoá (keyword), hay từ dành riêng (reserved word) : program, var, integer, begin, end Tên, hay định danh (identifier) : read, write, P, x, y Hằng (constants) : Phép toán (operators) : + , := Dấu phân cách (delimiters) : :, (, ), Cú pháp (syntax) Cú pháp quy định cách thức kết hợp ký tự thành từ, kết hợp từ thành câu lệnh (statement hay instruction), kết hợp câu lệnh thành chương trình hồn chỉnh mặt văn phạm Có thể hình dung cách kết hợp giống cách đặt câu ngôn ngữ tự nhiên Thường người ta dùng sơ đồ cú pháp (syntax diagram) dạng chuẩn Backus-Naur (Backus-Naur Form, viết tắt BNF), dạng chuẩn Backus-Naur mở rộng (EBNF − Extended Backus-Naur Form) để mô tả cú pháp văn phạm LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC Ví dụ I.1 : Trong ngơn ngữ Pascal (hoặc phần lớn ngơn ngữ lập trình), tên gọi, hay định danh (identifier) có sơ đồ cú pháp sau : tên số chữ chữ số chữ A Z a z Hình 0.1 Sơ đồ cú pháp tên ngôn ngữ Pascal Trong sơ đồ cú pháp, hình chữ nhật phải thay hình tròn Q trình thay thực thứ tự theo chiều mũi tên nhận câu Chẳng hạn «đọc» sơ đồ sau : tên phải bắt đầu chữ, chữ số tuỳ ý, chữ chũ A Za z, số chũ số Như vậy, Delta, x1, x2, Read, v.v tên viết đúng, 1A, β, π, bán kính, v.v khơng phải tên vi phạm quy tắc cú pháp Văn phạm BNF gồm dãy quy tắcc Mỗi quy tắc gồm vế trái, dấu định nghĩa ::= (đọc định nghĩa bởi) vế phải Vế trái ký hiệu phải định nghĩa, vế phải dãy ký hiệu, thừa nhận, định nghĩa từ trước đó, tuân theo quy ước EBNF dùng ký tự quy ước sau : Ký hiệu Ý nghĩa ::=, →, = { } [] < > | định nghĩa chuỗi hay nhiều mục liệt kê tuỳ chọn (option) hoặc mục liệt kê tuỳ chọn mục liệt kê phải thay (theo nghĩa loại trừ) Các quy tắc BNF định nghĩa tên ngôn ngữ Pascal : ::= { | } ::= ’A’ | | ’Z’ | ’a’ | | ’z’ ::= ’0’ | | ’9’ Ví dụ I.2 Văn phạm ngơn ngữ lập trình đơn giản dạng EBNF sau : ::= program * end ::= | ::= := ; ::= while + done ::= | + | H, ins( X, T, L ) ?- ins(8, [ 1, 2, 3, 4, ], L) L = [1, 2, 3, 4, 5, 8] Yes ?- ins(1, L, [ 1, 2, 3, 4, ]) L = [2, 3, 4, 5] Yes ins_sort([ ], [ ]) ins_sort([H|T], L) :ins_sort(T, L1), ins(H, L1, L) ?- ins_sort([3, 2, 6, 4, 7, 1], L) L = [1, 2, 3, 4, 6, 7] Yes X.2.2 Tính độ dài danh sách Xây dựng thủ tục tính độ dài hay đếm số lượng phần tử có mặt danh sách cho sau : length( L, N ) Xảy hai trường hợp : Nếu danh sách rỗng, độ dài N = Nếu danh sách khác rỗng, tạo thành từ danh sách có dạng : [ head | queue ] có độ dài cộng với độ dài queue Ta có chương trình Prolog sau : length( [ ], ) length( [ _ | Queue ], N ) :length(Queue, N1 ), N is + N1 Kết chạy Prolog sau : ?- length( [ a, b, c, d, e ], N ) N = Yes ?- length( [ a, [ b, c ], d, e ], N ) N = Yes Ta thấy mệnh đề thứ hai, hai đích phần thân khơng thể hốn đổi cho nhau, N1 phải ràng buộc trước thực đích : N is + N1 Chẳng hạn, gọi trace, trình thực length( [ 1, 2, ], N ) sau : (0) (1) (2) (3) gọi gọi gọi gọi length([1, 2, 3], N) length([2, 3], N’) length([3], N’’) -> length([ ], N’’’) -> -> -> N’’’ = LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC (4) (5) (6) gọi gọi gọi N’’ is + -> N’ is + -> N is + -> 194 N’’ = N’ = N = Với is, ta đưa vào quan hệ nhạy cảm với thứ tự thực đích, khơng thể bỏ qua yếu tố thủ tục chương trình Điều xảy ta khơng sử dụng is chương trình Chẳng hạn : length1( [ ], ) length1( [ _ | Queue ], N ) :length1( Queue, N1 ), N = + N1 Lúc này, gọi : ?- length1( [ a, [ b, c ], d, e ], N ) Prolog trả lời : N = + (1 + (1 + (1 + 0))) Yes Phép cộng không khởi động cách tường minh nên không thực Tuy nhiên, ta hốn đổi hai đích mệnh đề thứ hai length1 : length1( [ ], ) length1( [ _ | Queue ], N ) :N = + N1, length1( Queue, N1 ) Kết chạy chương trình sau hốn đổi y hệt cũ Bây giờ, ta lại rút gọn mệnh đề đích : length1( [ ], ) length2( [ _ | Queue ], + N ) :length2( Queue, N ) Kết chạy chương trình lần y hệt cũ Prolog khơng đưa trả lời mong muốn, mà : ?- length1([ a, b, c, d], N) N = 1+ (1+ (1+ (1+0))) Yes X.2.3 Tạo sinh số tự nhiên Chương trình sau tạo sinh liệt kê số tự nhiên : % Natural Numbers nat(0) nat(N) :- nat(M), N is M + Khi thực đích câu hỏi : ?- nat(N), write(N), nl, fail số tự nhiên tạo sinh liên tiếp nhờ kỹ thuật quay lui Sau số tự nhiên nat(N) in nhờ write(N), fail bắt buộc thực quay lui Khi đó, luật thứ hai vận dụng để tạo sinh số tự nhiên tiếp tục NSD định dừng chương trình (^C) LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC 195 Bài tập chương Tìm đối tượng Prolog đắn mặt cú pháp số đối tượng cho Cho biết kiểu chúng (là nguyên tử, số, biến hay cấu trúc) ? a) b) c) d) e) f) g) h) i) j) Diane diane ‘Diane’ _diane ‘Diane va en vacances’ va( diane, vacances ) 45 5(X , Y) +( nord , owest ) three( small( cats ) ) Hãy tìm biểu diễn dạng đối tượng cấu trúc cho hình chữ nhật, hình vng hình tròn Xem hình 2.4 để có cách giải Sử dụng biễu diễn cho hình cụ thể để minh họa Chương trình sau nói hai người có quan hệ dòng họ với : a) tổ tiên người kia, hoặc, b) hai người có chung tổ tiên, hoặc, c) hai người có cháu kindred( X, Y) :ancestor(X , Y) kindred(X , Y) :ancestor(X , Y) kindred(X , Y) :% X Y có tổ tiên ancestor( Z, X), ancestor(Z , Y) kindred(X , Y) :% X Y có cháu ancestor (X , Z), ancestor(Y , Z) Hãy cho biết làm ngắn chương trình cách sử dụng dấu chấm phẩy ; khơng ? Hãy tìm hiểu định nghĩa quan hệ ancestor : ancestor(X Z) :parent(X Z) ancestor(X Z) :parent(Y , Z), ancestor( X, Y) Định nghĩa có hay khơng ? Có thể thay đổi lại sơ đồ cho hình 1.7 để tương ứng với định nghĩa ? Ngoài định nghĩa quan hệ gia đình có phần lý thuyết tập, định nghĩa quan hệ khác theo tập qn Việt Nam (cơ, dì, chú, bác ) ? LẬP TRÌNH HÀM VÀ LẬP TRÌNH LÔGIC 196 Hãy định nghĩa quan hệ giới sinh vật (động vật, thực vật) ? Cho biết hạng Prolog hợp thức sau (valid Prolog terms) : 23 +(fred, jim) foo(X, bar(+(3, 4))) 1+2 Foo(x) Alison Cawsey Cho quan hệ parent định nghĩa phần lý thuyết cho biết kết câu hỏi sau : a) ?- parent(jim , X) b) ?- parent( X , jim) c) ?- parent(mary , X) , parent( X , part) d) ?- parent(mary , X) , parent( X , y ) , parent(y , jim) Viết mệnh đề Prolog diễn tả câu hỏi liên quan đến quan hệ parent : a) Ai cha mẹ Sue ? b) Liz có không ? c) Ai ông bà (grandparent) Sue ? 10 Viết Prolog mệnh đề sau : a) Ai có đứa trẻ người hạnh phúc Hướng dẫn : Xây dựng quan hệ ngơi happy b) Với X, X có mà người có chị em gái, X có hai (xây dựng quan hệ have_two_children) 11 Định nghĩa quan hệ grandchild cách sử dụng quan hệ parent Hướng dẫn : tìm hiểu quan hệ grandparent 12 Định nghĩa quan hệ aunt( X, Y ) cách sử dụng quan hệ parent Để thuận tiện, vẽ sơ đồ minh họa 13 Các phép so khớp có khơng ? Nếu đúng, cho biết ràng buộc biến tương ứng ? a) point( A , B ) = point( , ) b) point( A , B ) = point( X , Y, Z ) c) addition( , ) = d) +( , D ) = +( E , ) e) triangle( point( -1 , ) , P2, P3 ) = triangle( P1, point( 1, ), point( 0, Y ) ) Các ràng buộc định nghĩa lớp tam giác Làm cách để mô tả lớp ? 14 Sử dụng mô tả đường thẳng cho học, tìm hạng biễu diễn đường thẳng đứng X = 15 Cho hình chữ nhật biễu diễn hạng: rectangle(P1, P2, P3, P4) Với Pi đỉnh hình chữ nhật theo chiều dương, định nghĩa quan hệ : regular( R ) R hình chữ nhật có cạnh thẳng đứng nằm ngang (song song với trục tọa độ) 16 Cho biết kết câu hỏi sau : ?- X=Y ?- X is Y ?- X=Y, Y=Z, Z=1 ?- X=1, Z=Y, X=Y LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC 197 ?- X is 1+1, Y is X ?- Y is X, X is 1+1 ?- 1+2 == 1+2 ?- X == Y ?- X == X ?- =:= 2-1 ?- X =:= Y 17 Cho biết kết câu hỏi sau : ?- op(X) is op(1) ?- op(X) = op(1) ?- op(op(Z), Y) = op(X, op(1)) ?- op(X, Y) = op(op(Y), op(X)) 18 Từ định nghĩa số tự nhiên (nat) phép cộng (addi) cho ví dụ mục định nghĩa hàm, viết tiếp hàm trừ (subt), nhân (multi), chia (divi), luỹ thừa (power), giai thừa (fact), so sánh nhỏ (less) tìm ước số chung lớn (pdg) sử dụng hàm có (chẳng hạn less, subt ) 19 Viết hàm Prolog để kiểm tra số nguyên tuỳ ý N : a N số chẵn (even number) sử dụng đệ quy trực tiếp Hướng dẫn : N chẵn N±2 số chẵn b N số lẻ (odd number) sử dụng đệ quy trực tiếp Hướng dẫn : N lẻ N±2 số lẻ c N chẵn sử dụng hàm kiểm tra số lẻ câu d (N chẵn N±1 số lẻ) d N số lẻ sử dụng hàm kiểm tra số chẵn câu c (N lẻ N±1 chẵn) 20 Viết hàm Prolog để làm duyệt (tracking/traverse) nhị phân theo thứ tự trước (reorder), sau (post-order) (in-order) Giả sử nhị phân tương ứng với biểu thức số học (5+6)*(3-(2/2)) mệnh đề Prolog sau : tree(’*’, tree(’+’, leaf(5), leaf(6)), tree(’-’, leaf(3), tree(’/’, leaf(2), leaf(2))) Kết duyệt sau : theo thứ tự trước : [*, +, 5, 6, -, 3, /, 2, 2] thứ tự : [5, +, 6, *, 3, -, 2, /, 2] thứ tự sau : [5, 6, +, 3, 2, 2, /, -, *] 21 Viết lại hàm tạo 10 số tự nhiên chẵn (đã cho phần đệ quy) cho kết trả dãy số tăng dần 22 Lập bảng nhân table(R, N) có số bị nhân (multiplicator) từ trở với số nhân N (multiplier) dừng lại gặp số bị nhân R (kết R * N) 23 Viết hàm tính gần giá trị hàm sau với độ xác e = 10-5 : π 1 = − + − + =0, CG>=0, MD>=0, CD>=0, MG=0, MD>=CD valid(MG,CG,MD,CD) :MG>=0, CG>=0, MD>=0, CD>=0, MG>=CG, MD=0 valid(MG,CG,MD,CD) :MG>=0, CG>=0, MD>=0, CD>=0, MG>=CG, MD>=CD /* Xây dựng cung kiểm tra */ sail(1,0) sail(0,1) sail(1,1) sail(2,0) sail(0,2) arc([left,MGi,CGi,MDi,CDi],[droite,MGf,CGf,MDf,CDf]) :sail(Mis,Can), MGf is MGi-Mis, MDf is MDi+Mis, CGf is CGi-Can, CDf is CDi+Can, valid(MGf,CGf,MDf,CDf) arc([right,MGi,CGi,MDi,CDi],[left,MGf,CGf,MDf,CDf]) :sail(Mis,Can), MGf is MGi+Mis, MDf is MDi-Mis, CGf is CGi+Can, CDf is CDi-Can, valid(MGf,CGf,MDf,CDf) /* Phép đệ quy */ cross(A,A,[A],Non) cross(X,Y,Ch,Non) :arc(X,A), lNotExist(A,Non), cross(A,Y,ChAY,[A|Non]), Ch=[X|ChAY] /* Đi qua */ traverse(X,Y,Ch) :cross(X,Y,Ch,[X]) ... dụng : Lập trình phân bổ (distributed programming) Lập trình ràng buộc (constraint programming) Lập trình hướng truy cập (access-oriented programming) LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC 10 Lập trình. .. số tự nhiên 194 LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC CHƯƠNG CÁC NGƠN NGỮ LẬP TRÌNH I Mở đầu ngơn ngữ lập trình I.1 Vài nét lịch sử Buổi ban đầu N hững ngôn ngữ lập trình (programming language)... : Hình 0.6 Cây nhị phân có nút Viết chương trình duyệt theo thứ tự (trái-gốc-phải), trước (gốc-trái-phải) sau (trái- phải-gốc) ? LẬP TRÌNH HÀM VÀ LẬP TRÌNH LƠGIC 17 CHƯƠNG NGƠN NGỮ SCHEME A line

Ngày đăng: 18/03/2019, 01:08

TỪ KHÓA LIÊN QUAN

w