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

24 2 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

Tiêu đề Lời Giải Bài Tập Prolog Chương 5 Kỹ Thuật Lập Trình Prolog
Tác giả Nhóm 5
Người hướng dẫn TS. Phan Văn Đức
Trường học Trường Đại Học Giao Thông Vận Tải TP.HCM
Chuyên ngành Lập trình logic và ràng buộc
Thể loại Bài tập hướng dẫn
Năm xuất bản 2023
Thành phố TP.HCM
Định dạng
Số trang 24
Dung lượng 4,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

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.

Trang 1

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

Trang 4

MỤC LỤC VIẾT TẮT

NSD: Người sử dụng

NLT: Người lập trình

Trang 5

Chương trình không dùng lát cắt:

Hình 1 Chương trình Prolog không có nhát cắt

Truy vấn và kế quả:

Hình 2 Kết quả truy vấn chương trình không có nhát cắt

Quá trình thực hiện: là X = 1 < 3 Y = 0 (luật 1) mà 2 < 0 (đích 2) false Tuy Y = 0 (luật 1) mà 2 < 0 (đích 2)  false Tuy  Y = 0 (luật 1) mà 2 < 0 (đích 2)  false Tuynhiên, Prolog sẽ không trả kết quả false ngay mà sẽ kiểm tra tiếp luật 2 và luật

3 Ta biết nó sẽ sai tiếp (do X = 1) nhưng Prolog thì không

Chương trình dùng lát cắt:

Trang 6

Hình 3 Chương trình có sử dụng nhát cắt

Truy vấn và kế quả:

Hình 4 Kết quả truy vấn chương trình có sử dụng nhát cắt

Quá trình thực hiện: là X = 1 < 3 Y = 0 (luật 1) mà 2 < 0 (đích 2)  Y = 0 (luật 1) mà 2 < 0 (đích 2)  false Tuy  false.Prolog sẽ trả kết quả false ngay mà không kiểm tra tiếp luật 2 và luật 3  tối ưuthời gian xử lý

Nhát cắt cho phép tạo ra các kết luận loại trừ nhau dạng:

Nếu (X < 3)

Y = 0; / luật 1Nếu không thì (X >= 3 , X < 6)

Y = 2; / luật 2Nếu không

Y = 4; / luật 3

1.2 Phép phủ định NOT

not Goal : true = Goal : false

Giải thích như sau nếu not Goal đúng thì Goal không not là sai

Trang 7

Hình 5 Ví dụ về phép phủ định

1.3 Phép true và fail

Prolog có hai đích đặc biệt là true luôn luôn đúng và fail luôn luôn sai

Hình 6 Ví dụ về true và fail

Hình 7 kết quả truy vấn của ví dụ true và fail

Chương trình vẫn sẽ cho kết quả đúng khi không có true và fail Tuy nhiên, ta

sẽ dùng chúng khi muốn chỉ định trực tiếp kết quả cho Prolog biết

2 SỬ DỤNG CÁC CẤU TRÚC

2.1 Các cấu trúc trong Prolog

Trong Prolog, tập hợp các sự kiện đủ để biểu diễn một cơ sở dữ liệu

Kỹ thuật đặt câu hỏi và so khớp của Prolog là những phương tiện mềm dẻocho phép truy cập từ cơ sở dữ liệu những thông tin có câu trúc

Cần sử dụng phương pháp trừu tượng hoá dữ liệu như là một kỹ thuật lậptrình cho phép sử dụng các câu trúc dữ liệu phức tạp một cách đơn giản, làmchương trình trở nên dễ hiểu

Trang 8

Trong Prolog, phương pháp trừu tượng hoá dữ liệu rất dễ triển khai.

Người ta có thể tiếp cận đến nhiều lời giải khác nhau cho một bài toán nhờ sửdụng nhiều cách biểu diễn dữ liệu khác nhau

Cách biểu diễn dữ liệu sử dụng nhiều thông tin tiết kiệm được tính toán, mặc

dù làm cho chương trình trở nên rườm rà, khó cô đọng

Kỹ thuật tổng quát hoá một bài toán, tuy trừu tượng, nhưng lại làm tăng khảnăng hướng đến lời giải, làm đơn giản hoá phát biểu bài toán

2.2 Ví dụ về cơ sở dữ liệu trong Prolog

Cấu trúc của một gia đình như sau:

Hình 8 Cấu trúc minh họa của một gia đình 4 thành viên

Khai báo gia đình này trong Prolog như sau:

Hình 9 Câu lệnh khai báo trong Prolog về gia đình 4 thành viên

Trang 9

Truy vấn liệu người đầu tiên trong family có phải họ Smith không?:

Hình 10 Hỏi Prolog xem người đầu tiên có phải tên là Smith không?

Truy vấn thông tin người đầu tiên trong family?:

Hình 11 Hỏi Prolog về toàn bộ thông tin của người đầu tiên

Truy vấn dài dòng người sử dụng dể gặp lỗi Rất khó cho người mới có thểthực hiện được truy vấn Do đó để người dung dể dàng truy vấn ta thêm cácdòng lệnh sau để hỏi về chồng, vợ, các con, tất cả thành viên, lương, khônglương Ta thêm các dòng mô tả như sau:

Hình 12 Mô tả cụ thể các trường thông tin của family

Bây giờ ta sẽ thử truy vấn Prolog để kiểm tra:

Trang 10

Hình 13 Truy vấn Prolog với các câu hỏi mới

Thông tin được truy vấn dễ dàng hơn tuy nhiên chương trình lại trở nên rườm

và trên các thiết bị lưu trữ ngoài được xem là quá trình làm việc với các tệp

Hình 14 Liên lạc giữa trình Prolog và nhiều tệp

Trang 11

Mỗi một chương trình Prolog chỉ có 1 dòng vào hiện hành và 1 dòng ra hiệnhành.

Tệp đang được đọc gọi là dòng hiện hành ( active input stream) Tệp đangđược ghi được gọi là dòng ra hiện hành (active output stream)

Tệp đang được đọc là bàn phím và tệp đang được ghi là màn hình (hoặc máyin) tương ứng với dòng vào ra chuẩn user

Trang 12

Hình 15 Một số vị từ làm việc với tệp

Ví dụ về việc đọc một tệp

Hình 16 Truy vấn gọi tệp exp.pl và đọc hạng đầu tiên.

Trang 13

Hình 17 Tệp exp.pl được tạo sẵn

Trong đó:

- Lệnh see(‘exp.pl’): dùng để chọn dòng vào hiện hành là file exp.pl (đãđược tạo sẵn)

- Lệnh read(T): đọc một hạng đầu tiên

- Lệnh see(user): đưa về dòng hiện hành là bàn phím (có thể thay thế bằnglệnh told)

Ví dụ về việc ghi một tệp

Hình 18 Ghi vào tệp exp.pl nội dung parent(huu,vinh).

Hình 19 Nội dung đã được ghi vào file exp.pl

Trang 14

- Lệnh tell(user): đưa về dòng hiện hành là màn hình (có thể thay thế bằnglệnh seen).

Ví dụ 2: Bài toán lũy thừa 3

Giải bà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 3

Hình 21 21 Kết quả cho chương trình lũy thừa 3 dùng câu lệnh bình thường

 NSD cần gọi hàm cube nhiều lần khi cần truy vấn nhiều lần

Ta sẽ sử dụng các 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 các vị từ làm việc với tệp

Trang 15

Hình 23 Kết quả truy vân tệp chuẩn

 NSD không cần gọi hàm cube nhiều lần khi 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 các ký tự: ta vận dụng các 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 và 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 quả của chương trình xóa dấu cách thừa

Trang 16

Vị từ follow đóng vai trò như là việc xóa khoảng trống Số 32 là dấu cáchtrong mã ASCII, 44 là dấu chấm trong mã ASCII.

Prolog có vị từ name cho phép tương tác với các nguyên tử với các mãASCII

name(Word, Detail)

Trong đó Word là các ký tự hoặc chuỗi trong dấu nháy đơn, Detail là kết quả

mã ASCII trả về cho từng ký tự của Word

Hình 26 Ví dụ về vị từ name

Trang 17

2 BÀI TẬP TỔNG HỢP

Trang 19

4.2 Lời giải

Hình 30 Đáp án câu 4

BÀI 5:

5.1 Câu hỏi

Bài 5 Định nghĩa thủ tục difference(Set1,Set2,SetDiff) tìm hiệu hai tập hợp Set1

và Set2 với quy ước tập hợp được biểu diễn bởi các danh sách Chẳn hạn:

5.2 Lời giải

Trang 21

Bai 8 Cho f một tệp chứa hạng hãy định nghĩa thủ tục findTerm(Term) đểđưa ra màn hình hạng đầu tiên của f khớp được với Term?

8.2 Lời giải

Hình 33 Đáp án bài 8

BÀI 9:

9.1 Câu hỏi

Bài 9 Cho f một tệp chứa các hạng, hãy định nghĩa thủ tục findallterm(Term)

để đưa ra màn hình tất cả các hạng của f khớp được với Term? Kiểm tra tínhchất biến Term không thể được gán giá trị khi thực hiện tìm kiếm

9.2 Lời giải

Hình 34 Đáp án bài 9

BÀI 10:

10.1 Câu hỏi

Bài 10 Hãy mở rộng thủ tục del_space đã được trình bày trong phần lý thuyết để

có thể xử lý loại bỏ các dấu cách thừa nằm trước dấu phẩy (comma) và chỉ giữlại một dấu cách nằm ngay sau dấu phẩy

10.2 Lời giải

Trang 23

Bài 13 Định nghĩa thủ tục cho phép đổi một danh từ tiếng Anh từ số ít(singular) sang số nhiều (plural) được thực hiện như sau:

14.2 Lời giải

Hình 39 Đáp án câu 14

Trang 24

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 trong 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 bài tập lập trình Prolog”, Võ Xuân Phong

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w