1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Lời giải bài tập prolog chương 5 Kỹ thuật lập trình prolog môn lập trình logic và ràng buộc

26 0 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 26
Dung lượng 4,32 MB

Nội dung

Lập trình Logic và ràng buộc GVBM Phan Văn Đức BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM oOo BÀI TẬP CHƯƠNG 5 KỸ THUẬT LẬP TRÌNH PROLOG MÔN HỌC LẬP TRÌNH LO.

BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ GIAO THÔNG VẬN TẢI TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP.HCM - oOo BÀI TẬP CHƯƠNG 5: KỸ THUẬT LẬP TRÌNH PROLOG MƠN HỌC: LẬP TRÌNH LOGIC VÀ RÀNG BUỘC TP.HCM, 2023 MỤC LỤC MỤC LỤC MỤC LỤC VIẾT TẮT LÝ THUYẾT CHƯƠNG KỸ THUẬT NHÁT CẮT VÀ PHỦ ĐỊNH 1.1 NHÁT CẮT 1.2 PHÉP PHỦ ĐỊNH NOT 1.3 PHÉP TRUE VÀ FAIL SỬ DỤNG CÁC CẤU TRÚC 2.1 CÁC CẤU TRÚC TRONG PROLOG 2.2 VÍ DỤ VỀ CƠ SỞ DỮ LIỆU TRONG PROLOG LÀM VIỆC VỚI TỆP 10 3.1 LÀM VIỆC VỚI TỆP 10 3.2 LÀM VIỆC VỚI KÝ TỰ 16 BÀI TẬP TỔNG HỢP 18 BÀI 1: 18 1.1 CÂU HỎI 18 1.2 LỜI GIẢI 18 BÀI 2: 18 2.1 CÂU HỎI 18 2.2 LỜI GIẢI 19 BÀI 3: 19 3.1 CÂU HỎI 19 3.2 LỜI GIẢI 20 BÀI 4: 20 4.1 CÂU HỎI 20 4.2 LỜI GIẢI 20 TP.HCM, 2023 Nhóm Lập trình logic ràng buộc BÀI 5: 20 5.1 CÂU HỎI 20 5.2 LỜI GIẢI 20 BÀI 6: 21 6.1 CÂU HỎI 21 6.2 LỜI GIẢI 21 BÀI 8: 22 8.1 CÂU HỎI 22 8.2 LỜI GIẢI 22 BÀI 9: 22 9.1 CÂU HỎI 22 9.2 LỜI GIẢI 22 BÀI 10: 22 10.1 CÂU HỎI 22 10.2 LỜI GIẢI 23 BÀI 11: 23 11.1 CÂU HỎI 23 11.2 LỜI GIẢI 23 BÀI 12: 23 12.1 CÂU HỎI 23 12.2 LỜI GIẢI 23 BÀI 13: 24 13.1 CÂU HỎI 24 13.2 LỜI GIẢI 24 BÀI 14: 24 14.1 CÂU HỎI 24 14.2 LỜI GIẢI 25 tài liệu tham khảo 26 Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc MỤC LỤC VIẾT TẮT NSD: Người sử dụng NLT: Người lập trình Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc LÝ THUYẾT CHƯƠNG KỸ THUẬT NHÁT CẮT VÀ PHỦ ĐỊNH 1.1 Nhát cắt Nhát cắt ngăn cản quay lui, làm tăng hiệu chạy chương trình mà cịn làm tối ưu tính biểu ngôn ngữ Chỉ cho Prolog thấy đường dẫn đến thất bại Chương trình khơng dùng lát cắt: Hình Chương trình Prolog khơng có nhát cắt Truy vấn kế quả: Hình Kết truy vấn chương trình khơng có nhát cắt Q trình thực hiện: X = <  Y = (luật 1) mà < (đích 2)  false Tuy nhiên, Prolog không trả kết false mà kiểm tra tiếp luật luật Ta biết sai tiếp (do X = 1) Prolog khơng Chương trình dùng lát cắt: Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình Chương trình có sử dụng nhát cắt Truy vấn kế quả: Hình Kết truy vấn chương trình có sử dụng nhát cắt Quá trình thực hiện: X = <  Y = (luật 1) mà < (đích 2)  false Prolog trả kết false mà không kiểm tra tiếp luật luật  tối ưu thời gian xử lý Nhát cắt cho phép tạo kết luận loại trừ dạng: Nếu (X < 3) Y = 0; / luật Nếu khơng (X >= , X < 6) Y = 2; / luật Nếu không Y = 4; / luật 1.2 Phép phủ định NOT not Goal : true = Goal : false Giải thích sau not Goal Goal khơng not sai Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình Ví dụ phép phủ định 1.3 Phép true fail Prolog có hai đích đặc biệt true ln ln fail ln ln sai Hình Ví dụ true fail Hình kết truy vấn ví dụ true fail Chương trình cho kết khơng có true fail Tuy nhiên, ta dùng chúng muốn định trực tiếp kết cho Prolog biết SỬ DỤNG CÁC CẤU TRÚC 2.1 Các cấu trúc Prolog Trong Prolog, tập hợp kiện đủ để biểu diễn sở liệu Kỹ thuật đặt câu hỏi so khớp Prolog phương tiện mềm dẻo cho phép truy cập từ sở liệu thông tin có câu trúc Cần sử dụng phương pháp trừu tượng hố liệu kỹ thuật lập trình cho phép sử dụng câu trúc liệu phức tạp cách đơn giản, làm chương trình trở nên dễ hiểu Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Trong Prolog, phương pháp trừu tượng hố liệu dễ triển khai Người ta tiếp cận đến nhiều lời giải khác cho toán nhờ sử dụng nhiều cách biểu diễn liệu khác Cách biểu diễn liệu sử dụng nhiều thơng tin tiết kiệm tính tốn, làm cho chương trình trở nên rườm rà, khó đọng Kỹ thuật tổng qt hố tốn, trừu tượng, lại làm tăng khả hướng đến lời giải, làm đơn giản hoá phát biểu tốn 2.2 Ví dụ sở liệu Prolog Cấu trúc gia đình sau: Hình Cấu trúc minh họa gia đình thành viên Khai báo gia đình Prolog sau: Hình Câu lệnh khai báo Prolog gia đình thành viên Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Truy vấn liệu người family có phải họ Smith khơng?: Hình 10 Hỏi Prolog xem người có phải tên Smith không? Truy vấn thông tin người family?: Hình 11 Hỏi Prolog tồn thơng tin người Truy vấn dài dịng người sử dụng dể gặp lỗi Rất khó cho người thực truy vấn Do để người dung dể dàng truy vấn ta thêm dòng lệnh sau để hỏi chồng, vợ, con, tất thành viên, lương, không lương Ta thêm dịng mơ tả sau: Hình 12 Mơ tả cụ thể trường thông tin family Bây ta thử truy vấn Prolog để kiểm tra: Nhóm thực hiện: Nhóm Trang 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 13 Truy vấn Prolog với câu hỏi Thông tin truy vấn dễ dàng nhiên chương trình lại trở nên rườm rà LÀM VIỆC VỚI TỆP 3.1 Làm việc với tệp Giống ngơn ngữ lập trình khác, Prolog xem thiết bị vào chuẩn (bàn phím, hình) tệp đặc biệt Quá trình vào thiết bị thiết bị lưu trữ xem trình làm việc với tệp Hình 14 Liên lạc trình Prolog nhiều tệp Nhóm thực hiện: Nhóm Trang 10 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 15 Một số vị từ làm việc với tệp Ví dụ việc đọc tệp Hình 16 Truy vấn gọi tệp exp.pl đọc hạng Nhóm thực hiện: Nhóm Trang 12 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 17 Tệp exp.pl tạo sẵn Trong đó: - Lệnh see(‘exp.pl’): dùng để chọn dịng vào hành file exp.pl (đã tạo sẵn) - Lệnh read(T): đọc hạng - Lệnh see(user): đưa dịng hành bàn phím (có thể thay lệnh told) Ví dụ việc ghi tệp Hình 18 Ghi vào tệp exp.pl nội dung parent(huu,vinh) Hình 19 Nội dung ghi vào file exp.pl Trong đó: - Lệnh tell(‘exp.pl’): dùng để chọn dịng hành file exp.pl (đã tạo sẵn) - Lệnh write(‘parent(huu,vinh).’): ghi ghi nội dung vào tệp Nhóm thực hiện: Nhóm Trang 13 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc - Lệnh tell(user): đưa dòng hành hình (có thể thay lệnh seen) Ví dụ 2: Bài toán lũy thừa Giải toán với câu lệnh thơng thường: Hình 20 Câu lệnh bình thường cho lũy thừa Hình 21 21 Kết cho chương trình lũy thừa dùng câu lệnh bình thường  NSD cần gọi hàm cube nhiều lần cần truy vấn nhiều lần Ta sử dụng hàm làm việc với tệp để người dùng tự nhập nhiều lần Hình 22 Câu lệnh có sử dụng vị từ làm việc với tệp Nhóm thực hiện: Nhóm Trang 14 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 23 Kết truy vân tệp chuẩn  NSD không cần gọi hàm cube nhiều lần cần truy vấn nhiều lần 3.2 Làm việc với ký tự Làm việc với ký tự: ta vận dụng vị từ sở hình số 15 để tác động lên ký tự Ví Dụ: Nhập chuỗi từ bàn phím xóa dấu cách dư thừa: Hình 24 Chương trình Prolog xóa dấu cách thừa Hình 25 Truy vấn kết chương trình xóa dấu cách thừa Nhóm thực hiện: Nhóm Trang 15 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Vị từ follow đóng vai trị việc xóa khoảng trống Số 32 dấu cách mã ASCII, 44 dấu chấm mã ASCII Prolog có vị từ name cho phép tương tác với nguyên tử với mã ASCII name(Word, Detail) Trong Word ký tự chuỗi dấu nháy đơn, Detail kết mã ASCII trả cho ký tự Word Hình 26 Ví dụ vị từ name Nhóm thực hiện: Nhóm Trang 16 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc BÀI TẬP TỔNG HỢP BÀI 1: 1.1 Câu hỏi 1.2 Lời giải Hình 27 Đáp án câu BÀI 2: 2.1 Câu hỏi Nhóm thực hiện: Nhóm Trang 17 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc 2.2 Lời giải Hình 28 Đáp án câu BÀI 3: 3.1 Câu hỏi 3.2 Lời giải Nhóm thực hiện: Nhóm Trang 18 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 29 Đáp án câu BÀI 4: 4.1 Câu hỏi Bài cho hai sách accept reject, viết danh sách đích sử dụng kỹ thuật quay lui quan hệ member not để tìm phần tử có mặt accept khơng có mặt reject 4.2 Lời giải Hình 30 Đáp án câu BÀI 5: 5.1 Câu hỏi Bài Định nghĩa thủ tục difference(Set1,Set2,SetDiff) tìm hiệu hai tập hợp Set1 Set2 với quy ước tập hợp biểu diễn danh sách Chẳn hạn: 5.2 Lời giải Nhóm thực hiện: Nhóm Trang 19 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 31 Đáp án BÀI 6: 6.1 Câu hỏi Bai Hãy định nghĩa vị từ unifiable(List1,Term,List2) để kiểm tra so khớp, List2 danh sách tất phần tử List1 so khớp với Term khơng thực phép biến so khớp Ví dụ: ?- unfiable([X,bibo,t(Y)],t(a),List) List=[X,t(Y)] 6.2 Lời giải Hình 32 Đáp án BÀI 8: 8.1 Câu hỏi Nhóm thực hiện: Nhóm Trang 20 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Bai Cho f tệp chứa hạng định nghĩa thủ tục findTerm(Term) để đưa hình hạng f khớp với Term? 8.2 Lời giải Hình 33 Đáp án BÀI 9: 9.1 Câu hỏi Bài Cho f tệp chứa hạng, định nghĩa thủ tục findallterm(Term) để đưa hình tất hạng f khớp với Term? Kiểm tra tính chất biến Term khơng thể gán giá trị thực tìm kiếm 9.2 Lời giải Hình 34 Đáp án BÀI 10: 10.1 Câu hỏi Bài 10 Hãy mở rộng thủ tục del_space trình bày phần lý thuyết để xử lý loại bỏ dấu cách thừa nằm trước dấu phẩy (comma) giữ lại dấu cách nằm sau dấu phẩy 10.2 Lời giải Nhóm thực hiện: Nhóm Trang 21 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Hình 35 Đáp án 10 BÀI 11: 11.1 Câu hỏi Bài 11 Tương tự cho dấu chấm câu khác dấu chấm (period), dấu chấm phẩy (semicolon), dấu chấm hỏi (question mark), v.v… 11.2 Lời giải Hình 36 Đáp án câu 11 BÀI 12: 12.1 Câu hỏi Bai 12 Định nghĩa quan hệ firstchar(Atom,Char) cho phép kiểm tra Char có phải ký tự Atom hay không (Atom bắt đầu Char)? 12.2 Lời giải Hình 37 Đáp án 12 BÀI 13: 13.1 Câu hỏi Nhóm thực hiện: Nhóm Trang 22 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc Bài 13 Định nghĩa thủ tục cho phép đổi danh từ tiếng Anh từ số (singular) sang số nhiều (plural) thực sau: ?- plural(table,X) X=tables Yes 13.2 Lời giải Hình 38 Đáp án 13 BÀI 14: 14.1 Câu hỏi Bài 14 Áp dụng thủ tục readsentence trình bày phần lý thuyết để xây dựng thủ tục: ?-find(Keyword,Sentence) Cho phép tìm tệp đọc câu chứa từ khóa Keyword Câu Sentence phải dạng đọc vào chưa xử lý, nghĩa biểu diễn chuỗi ký tự, nguyên tử 14.2 Lời giải Hình 39 Đáp án câu 14 Nhóm thực hiện: Nhóm Trang 23 24 GVHD: TS Phan Văn Đức Nhóm Lập trình logic ràng buộc TÀI LIỆU THAM KHẢO [1] https://www.swi-prolog.org/pldoc/man?section=quickstart, “Prolog Tutorials”, SWI Prolog [2] Lập trình Lơgích Prolog, PSG TS Phan Duy Khánh, Nhà Xuất Bản Đại Học Quốc Gia Hà Nội, 2004 [3] https://voxuanphong.wordpress.com/2017/04/12/bai-tap-danh-sach-prolog/, “Tổng hợp tập lập trình Prolog”, Võ Xn Phong Nhóm thực hiện: Nhóm Trang 24 24 GVHD: TS Phan Văn Đức

Ngày đăng: 02/05/2023, 16:49

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w