Lời giải các bài tập rolog chương 1 mở đầu về ngôn ngữ prolog môn lập trình logic và ràng buộc cao học

36 3 0
Lời giải các bài tập rolog chương 1 mở đầu về ngôn ngữ prolog  môn lập trình logic và ràng buộc  cao học

Đ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

Môn học Lập trình logic và ràng buộc GVHD TS Phan Văn Đức Môn học Lập trình logic và ràng buộc GVHD TS Phan Văn Đức TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM BÁO CÁO MÔN LẬP TRÌNH LOGIC VÀ RÀNG BUỘC TP.

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP.HCM BÁO CÁO MƠN LẬP TRÌNH LOGIC VÀ RÀNG BUỘC TP HỒ CHÍ MINH, THÁNG 04 NĂM 2023 MỤC LỤC Tran 2.1 Đề bài: 14 2.2 Lời giải: 14 2.3 Mô SWI-Prolog 14 BÀI TẬP 17 3.1 Đề bài: 17 3.2 Lời giải: 18 3.3 Mô SWI-Prolog 18 Bài tập 20 4.1 Đề 20 4.2 Lời giải 20 Bài tập 21 5.1 Đề 21 5.2 Lời giải 21 Bài tập 22 6.1 Đề 22 6.2 Lời giải 22 6.3 Mô Phỏng 22 Bài tập 24 7.1 Đề 24 7.2 Lời giải 24 Bài tập 24 8.1 Đề 24 8.2 Lời giải 25 Bài tập 26 9.1 Đề 26 9.2 Lời giải 26 10 Bài tập 10 26 10.1 Đề 26 10.2 Lời giải 26 11 Bài tập 11 26 11.1 Đề 26 11.2 Lời giải 27 12 Bài tập 12 27 12.1 Đề 27 12.2 Lời giải 27 13 Bài tập 13 28 13.1 Đề 28 13.2 Lời giải 28 14 Bài tập 14 28 14.1 Đề 28 14.2 Lời giải 28 15 Bài tập 15 29 15.1 Đề 29 15.2 Lời giải 29 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Phần 1: LÝ THUYẾT I GIỚI THIỆU NGON NGỮ PROLOG 1.Prolog ngôn ngữ lập trình lơgich Prolog ngơn ngữ sử dụng phổ biến dịng ngơn ngữ lập trình lơgich (Prolog có nghĩa PROgramming in LOGic) Ngơn ngữ Prolog giáo sư người Pháp Alain Colmerauer nhóm nghiên cứu ơng đề xuất lần trường Đại học Marseille đầu năm 1970 Đến năm 1980, Prolog nhanh chóng áp dụng rộng rãi châu Âu, người Nhật chọn làm ngôn ngữ phát triển dịng máy tính hệ Prolog cài đặt máy vi tính Apple II, IBM-PC, Macintosh Prolog cịn gọi ngơn ngữ lập trình ký hiệu (symbolic programming) tương tự ngơn ngữ lập trình hàm (functional programming), hay lập trình phi số (non- numerical programming) Prolog thích hợp để giải toán liên quan đến đối tượng (object) mối quan hệ (relation) chúng Prolog sử dụng phổ biến lĩnh vực trí tuệ nhân tạo Ngun lý lập trình lơgich dựa mệnh đề Horn (Horn logíc) Một mệnh đề Horn biễu diễn kiện hay việc khơng đúng, xảy khơng xảy (có khơng có, v.v ) Cú pháp Prolog a) Các thuật ngữ Một chương trình Prolog sở liệu gồm mệnh đề (clause) Mỗi mệnh đề xây dựng từ vị từ (predicat) Một vị từ phát biểu đối tượng có giá trị chân (true) sai (fail) Một vị từ có đối ngun lơgich (logic atom) Mỗi ngun tử (nói gọn) biểu diễn quan hệ hạng (term) Như vậy, hạng quan hệ hạng tạo thành mệnh đề Hạng xem đối tượng “dữ liệu” trình Prolog Hạng hạng sơ cấp (elementary term) gồm (constant), biến (variable) hạng phức hợp (compound term) Các hạng phức hợp biểu diễn đối tượng phức tạp toán cần giải thuộc lĩnh vực xét Hạng phức hợp hàm tử (functor) có chứa đối (argument), có dạng Tên_hàm_tử(Đối_1, , Đối_n) Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức Tên hàm tử chuỗi chữ và/hoặc chũ số bắt đầu chữ thường Các đối biến, hạng sơ cấp, hạng phức hợp b) Các kiểu liệu Prolog Các kiểu (trực kiện) * Kiểu số Prolog sử dụng số nguyên số thực * Kiểu lôgich Prolog sử dụng hai lơgich có giá trị true fail * Kiểu chuỗi ký tự • Các chuỗi (string) ký tự đặt hai dấu nháy kép • "Toto \#\{@ tata" chuỗi có tuỳ ý ký tự • "" chuỗi rỗng (empty string) • "\"" chuỗi có dấu nháy kép * Kiểu nguyên tử Các nguyên tử Prolog chuỗi ký tự ba dạng sau : Chuỗi gồm chữ cái, chữ số ký tự _ luôn bắt đầu chữ in thường newyork a_ nil xy x25 tom_cruise Chuỗi ký tự đặc biệt : < -> : ======> ::== chuỗi đặt hai dấu nháy đơn (quote) bắt đầu chữ in hoa, dùng phân biệt với tên biến : ’Jerry’ ’Tom SMITH’ Biến • Tên biến chuỗi ký tự gồm chữ cái, chữ số, bắt đầu chữ hoa dấu gạch dịng : • X, Y, A • Result, List_of_members • _x23, _X, _, Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn II SỰ KIỆN VA LUẬT TRONG PROLOG Sự kiện Để xây dựng kiện ta lấy ví dụ gia hệ đại gia đình bao gồm có ông, bà, cha, mẹ, anh, chị em Từ gia hệ đây, tiếp tục viết vị từ khác để nhận chương trình Prolog gồm vị từ sau : parent(mary, bill) parent(tom, bill) parent(tom,liz) parent(bill, ann) parent(bill, sue) parent(sue,jim) Xây dựng luật Cơ sở xây dựng luật dựa kiện cho thực tế chứng minh, trình áp dụng luật người sử dụng viết cấu trúc câu lệnh tạo mệnh đề đắn, hợp lý đảm bảo chương trình chạy theo tiêu chuẩn Ví dụ: Từ chương trình gia hệ đây, ta dễ dàng bổ sung thông tin khác, chẳng hạn bổ sung kiện giới tính (nam, nữ) người nêu tên quan hệ parent sau : woman(mary) man(tom) man(bill) woman(liz) woman(sue) woman(ann) man(jim) Ta định nghĩa quan hệ đơn (unary) woman man chúng liên quan đến đối tượng Cịn quan hệ parent nhị phân, liên quan đến cặp đối tượng Như vậy, quan hệ đơn dùng để thiết lập thuộc tính đối tượng Mệnh đề : woman(mary) Môn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức giải thích : Mary nữ Tuy nhiên, ta sử dụng quan hệ nhị phân để định nghĩa giới tính : sex(mary, female) sex(tom, male) sex(bill, male) Bây ta đưa vào quan hệ child, đối ngược với parent sau : child(liz, tom) Từ đó, ta định nghĩa luật sau : child(Y, X) :- parent(X, Y) Luật hiểu : Với X Y, Y X X cha (hay mẹ) Y hay Với X Y, X cha (hay mẹ) Y Y X Định nghĩa luật đệ quy Bây ta tiếp tục thêm quan hệ vào chương trình Quan hệ sử dụng quan hệ parent, có hai luật Luật thứ định nghĩa tổ tiên trực tiếp, luật thứ hai định nghĩa tổ tiên gián tiếp Ta nói X tổ tiên gián tiếp Z tồn liên hệ cha mẹ (ông bà) X Z Tom tổ tiên trực tiếp Liz, tổ tiên gián tiếp Sue Ta định nghĩa luật (tổ tiên trực tiếp) sau : Với X Z, X tổ tiên Z X cha mẹ Z ancestor(X, Z) :parent(X, Z) Cho đến lúc này, ta định nghĩa nhiều quan hệ (parent, woman, man, grandparent, child, sister, mother ancestor) Ta thấy quan hệ tương ứng với mệnh đề, nhiên, quan hệ ancestor lại có hai mệnh đề Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Người ta nói mệnh đề liên quan (concern) đến quan hệ ancestor Trong trường hợp tất mệnh đề liên quan đến quan hệ, người ta nhận thủ tục (procedure) Sử dụng biến Prolog Khi tính tốn, NSD thay biến mệnh đề đối tượng khác Lúc ta nói biến bị ràng buộc Các biến xuất mệnh đề gọi biến tự Người ta giả thiết biến lượng tử tồn thể đọc «với mọi» Tuy hiên có nhiều cách giải thích khác trường hợp biến xuất phần bên phải luật Ví dụ : haveachil(X) :- parent(X, Y) đọc sau : (a) Với X Y, X cha (hay mẹ) Y X có người (b) Với X, X có người tồn Y cho X cha (hay mẹ) Y Khi biến xuất lần mệnh đề khơng cần đặt tên cho Prolog cho phép sử dụng biến nặc danh (anonymous variable) biến có tên dấu gạch dịng _ Ta xét ví dụ sau : have_a_child(X) :- parent(X, Y) Luật nêu lên với X, X có X cha Y Ta thấy đích have_a_child khơng phụ thuộc vào tên con, sử dụng biến nặc danh sau : have_a_child(X) :- parent(X, _) Mỗi vị trí xuất dấu gạch dòng _ mệnh đề tương ứng với biến nặc danh Ví dụ ta muốn thể tồn người có tồn hai đối tượng cho đối tượng cha đối tượng kia, ta viết : Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức someone_has_a_child :- parent(_, _) Mệnh đề tương đương với : someone_has_a_child :- parent(X, Y) hoàn toàn khác với : someone_has_a_child :- parent(X, X) Nếu biến nặc danh xuất câu hỏi, Prolog khơng hiển thị giá trị biến kết trả Nếu ta muốn tìm kiếm người có con, mà khơng quan tâm đến tên gì, cần viết : ?- parent(X, _) tìm kiếm người con, mà khơng quan tâm đến cha mẹ : ?- parent(_ , X) Tầm vực từ vựng (lexical scope) biến mệnh đề không vượt khỏi mệnh đề Có nghĩa nếu, ví dụ, biến X15 xuất hai mệnh đề khác nhau, tương ứng với hai biến phân biệt Trong mệnh đề, X15 luôn biểu diễn biến Tuy nhiên tình lại khác : nguyên tử thể đối tượng tất mệnh đề, có nghĩa tất chương trình III KIỂU DỮ LIỆU CẤU TRUC CỦA PROLOG Định nghĩa kiểu cấu trúc Prolog Kiểu liệu có cấu trúc, tương tự cấu trúc ghi, đối tượng có nhiều thành phần, thành phần lại cấu trúc Prolog xem thành phần đối tượng xử lý cấu trúc Để tổ hợp thành phần thành đối tượng nhất, Prolog sử dụng hàm tử Ví dụ: Cấu trúc gồm thành phần ngày tháng năm tạo hàm tử date Ngày 2/9/1952 viết sau : date(2, september, 1952) Mọi đối tượng có cấu trúc biểu diễn hình học dạng (tree), với hàm tử gốc, thành phần tham đối nhánh Nếu thành phần cấu trúc, thành phần tạo thành ban đầu Hai hạng có cấu trúc có biểu diễn có thành phần (pattern of variables) Hàm tử gốc gọi hàm tử hạng Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức BÀI TẬP 3.1 Đề bài: Chương trình sau nói hai người có quan hệ dịng họ với nếu: a) tổ tiên người hoặc, b) hai người có chung tổ tiên, 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) 21 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn 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? 3.2 Lời giải: Giải: Ta thay Dấu chấm phẩy (;) sau: ancestor(mary,bill) ancestor(mary,tom) ancestor(john,tom) ancestor(john,bill) kindred(X,Y):-ancestor(X,Y); ancestor(Z, X),ancestor(Z, Y); ancestor(X, Z),ancestor(Y, Z) 3.3 Mô SWI-Prolog 22 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 23 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Bài tập 4.1 Đề 4.2 Lời giải ancestor(X, Z) :parent(X, Z) ancestor(X, Z) :parent(Y , Z), ancestor( X, Y) Cú pháp xây dựng thiếu dấu phẩy (,) X Z; Theo cú pháp xây dựng lại định nghĩa Đúng Ta thay đổi sơ đồ sau: Parent/ ancestor X Y ………………… ancestor Parent 24 Z Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức Bài tập 5.1 Đề 5.2 Lời giải Trên sơ đồ thể mối quan hệ tổ tiên Cha, mẹ Cơ, Dì, Chú, Bác ơng bà sinh (xét cho gia đình nhỏ) Qua cha mẹ gọi anh, chị, em cha mẹ Cơ, Dì, Chú, Bác bọn trẻ anh chị em theo vai vế cha mẹ (Do Ông Bà sinh trước sau) Thực tế Việt Nam xét Cơ, Dì, Chú, Bác dịng họ lớn phức tạp (ít đời) 25 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Bài tập 6.1 Đề 6.2 Lời giải Động vật lồi thú, cầm, bị sát, ong, tằm lồi trùng khác; động vật lưỡng cư; cá, giáp xác, nhuyễn thể, động vật có vú sống nước loài động vật thủy sinh khác Thực vật sinh vật có khả tạo cho chất dinh dưỡng từ hợp chất vơ đơn giản xây dựng thành phần tử phức tạp nhờ trình quang hợp, diễn lục lạp thực vật Đoạn code: dong_vat(animal) thuc_vat(tree) co4chan(X):-dong_vat(X) anthit(X):-dong_vat(X) hutnuoc(Y):-thuc_vat(Y) 6.3 Mơ Phỏng 26 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 27 Môn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Bài tập 7.1 Đề 7.2 Lời giải 23 hợp lệ số +(fred,jim) hợp lệ thuật ngữ ghép đại diện cho biểu thức số học với toán tử cộng foo(X,bar(+3,4))) hợp lệ ghép từ mệnh đề 1+2 hợp lệ ghép mệnh đề 1,2 + Foo(x) sai x phải X Alison Cawsey sai có chứa phím cách (Space) chữ Bài tập 8.1 Đề 28 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 8.2 Lời giải a) b) sue c)liz d) x=bill; y=sue 29 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Bài tập 9.1 Đề 9.2 Lời giải a) ?-parent(X, sue) b) ?-child(X, liz) c) ?granparent(X, sue) 10 Bài tập 10 10.1 Đề 10.2 Lời giải a) hu_man(happy) haveachild(X):-hu_man(X) b) parent(X,Y) sister(Y,Z) have_two_children (X) 11 Bài tập 11 11.1 Đề 30 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 11.2 Lời giải Parent(X, Y) Parent(Y,Z) Grandchild(Z,X) 12 Bài tập 12 12.1 Đề 12.2 Lời giải parent(A,B) parent(A,X) sister(B,X) aunt(X,Y) 31 Môn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn 13 Bài tập 13 13.1 Đề 13.2 Lời giải a) Đúng b) Sai c) Đúng d) Đúng e) Đúng 14 Bài tập 14 14.1 Đề 14.2 Lời giải vertical(seg(point(5, Y), point(5, Y1),point(5,Y2)) 32 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 15 Bài tập 15 15.1 Đề 15.2 Lời giải rectangle(P1,P2,P3,P4) rectangle (regular) (seg(point(x1,y1),point(x1,y2)=seg(point(x2,y1), point(x2,y2))): -regular(R) 33 Mơn học: Lập trình logic ràng buộc Đức GVHD: TS Phan Văn Phần KẾT LUẬN Nội dung trình bày yếu tố sơ cấp Prolog, gần gũi với lơgich hình thức Những điểm quan trọng mà ta có : - Những đối tượng sơ cấp Prolog nguyên tử, biến số Các đối tượng có cấu trúc, hay cấu trúc, dùng để biểu diễn đối tượng có nhiều thành phần - Các hàm tử dùng để xây dựng cấu trúc Mỗi hàm tử định nghĩa tên thứ nguyên (dimension) - Kiểu đối tượng định nghĩa hoàn toàn nhờ vào xuất mặt cú pháp - Tầm vực từ vựng (lexical scope) biến mệnh đề mà biến xuất Cùng tên biến xuất hai mệnh đề tương ứng với hai biến khác - Các cấu trúc biểu diễn đơn giản Prolog xem ngôn ngữ xử lý - Phép toán so khớp so sánh hai phần tử (term) tìm cách đồng chúng ràng buộc chúng - Nếu so khớp thành công, Prolog đưa ràng buộc biến tổng quát - Những khái niệm trình bày : mệnh đề, kiện, luật, câu hỏi, nguyên tử, biến, biến ràng buộc, phần đầu phần thân của mệnh đề, luật đệ quy, định nghĩa đệ quy, đích, đối tượng : nguyên tử, số, biến, hạng cấu trúc hàm tử, thứ nguyên hàm tử hàm tử hạng so khớp hạng ràng buộc tổng quát Phần TÀI LIỆU THAM KHẢO Lập trình logic Prolog - PGS.TS Phan Huy Khánh – Nhà xuất Đại học quốc gia Hà Nội - 2004 Prolog Family Relationship https://www.youtube.com/watch?v=QOt_ipXv9kQ 34 in Prolog -

Ngày đăng: 01/05/2023, 16:17

Tài liệu cùng người dùng

Tài liệu liên quan