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

Lời giải bài tập prolog chương 4 cấu trúc danh sách báo cáo cao học môn lập trình logic và ràng buộc.

28 4 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 4 cấu trúc danh sách báo cáo cao học môn lập trình logic và ràng buộc
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 Thành phố Hồ Chí Minh
Chuyên ngành Lập trình logic và ràng buộc
Thể loại Báo cáo cao học
Năm xuất bản 2023
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 28
Dung lượng 1,99 MB

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

Nội dung

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM BÁO CÁOMÔN LẬP TRÌNH LOGIC VÀ RÀNG BUỘC Người thực hiện Nguyễn Duy Quốc Thái Nguyễn Thanh Lưu Tên lớp TD2201 Giảng viên hướng dẫn TS Phan Văn Đức TP Hồ Chí Min.

Trang 1

BÁO CÁO MÔN LẬP TRÌNH LOGIC VÀ

RÀNG BUỘC

Người thực hiện: Nguyễn Duy Quốc Thái

Nguyễn Thanh Lưu Tên lớp: TD2201

Giảng viên hướng dẫn:TS Phan Văn Đức

Trang 3

PHẦN 1: BÀI TẬP CHƯƠNG 4 1

1 BÀI TẬP 1 1

1.1 Đề bài: 1

1.2 Lời giải: 1

1.3 Mô phỏng SWI-Prolog 1

2 BÀI TẬP 2 2

2.1 Đề bài: 2

2.2 Lời giải: 2

2.3 Mô phỏng SWI-Prolog: 2

3 BÀI TẬP 3 3

3.1 Đề bài: 3

3.2 Lời giải: 3

3.3 Mô phỏng SWI - Prolog: 3

4 BÀI TẬP 4 4

4.1 Đề bài: 4

4.2 Lời giải: 4

4.3 Mô phỏng SWI - Prolog: 4

5 BÀI TẬP 5 5

5.1 Đề bài: 5

5.2 Lời giải: 5

Trang 4

6.3 Mô phỏng SWI - Prolog: 6

7 BÀI TẬP 7 8

7.1 Đề bài: 8

7.2 Lời giải: 8

7.3 Mô phỏng SWI - Prolog: 9

8 BÀI TẬP 8 10

8.1 Đề bài: 10

8.2 Lời giải: 10

8.3 Mô phỏng SWI - Prolog: 10

9 BÀI TẬP 9 11

9.1 Đề bài: 11

9.2 Lời giải: 11

9.3 Mô phỏng SWI - Prolog: 11

10 BÀI TẬP 10 12

10.1 Đề bài: 12

10.2 Lời giải: 12

10.3 Mô phỏng SWI - Prolog: 13

11 BÀI TẬP 11 13

11.1 Đề bài: 13

11.2 Lời giải: 13

11.3 Mô phỏng SWI - Prolog: 14

12 BÀI TẬP 12 15

Trang 5

12.3 Mô phỏng SWI - Prolog: 15

13 BÀI TẬP 13 16

13.1 Đề bài: 16

13.2 Lời giải: 16

13.3 Mô phỏng SWI - Prolog: 17

14 BÀI TẬP 14 17

14.1 Đề bài: 17

14.2 Lời giải: 18

14.3 Mô phỏng SWI - Prolog: 18

15 BÀI TẬP 15 18

15.1 Đề bài: 18

15.2 Lời giải: 19

15.3 Mô phỏng SWI - Prolog: 19

16 BÀI TẬP 16 21

16.1 Đề bài: 21

16.2 Lời giải: 21

16.3 Mô phỏng SWI - Prolog: 22

17 BÀI TẬP 17 23

17.1 Đề bài: 23

17.2 Lời giải: 23

17.3 Mô phỏng SWI - Prolog: 23

Trang 10

?- [1|[2,3]] = [1,2,X]., Prolog sẽ trả về true và gán giá trị cho biến X là 3 Điều này có nghĩa

là danh sách [1|[2,3]] có thể được viết dưới dạng [1,2,3]

?- [1|[2,3,4]] = [1,2,x]., Prolog sẽ trả về false vì hai danh sách không giống nhau về cấu trúc

?- [1|[2,3,4]] = [1,2|X]., Prolog sẽ trả về true và gán giá trị cho biến X là [3,4] Điều này cónghĩa là danh sách [1|[2,3,4]] có thể được viết dưới dạng [1,2|[3,4]]

?- b(o,n,j,o,u,r) = L., Prolog sẽ trả về true và gán giá trị cho biến L là [b,o,n,j,o,u,r] Điềunày có nghĩa là cấu trúc b(o,n,j,o,u,r) có thể được viết dưới dạng một danh sách các thànhphần của nó

?- bon(Y) = [X,jour]., Prolog sẽ trả về true và gán giá trị cho biến X là bon và

biến Y là jour Điều này có nghĩa là cấu trúc bon(Y) có thể được viết dưới dạng một danhsách các thành phần của nó

Trang 11

?- X(Y) = [bon,jour]., Prolog sẽ trả về true và gán giá trị cho biến X là bon và

biến Y là jour Điều này có nghĩa là cấu trúc X(Y) có thể được viết dưới dạng một danhsách các thành phần của nó

6 BÀI TẬP 6.

6.1 Đề bài:

6.2 Lời giải:

subset2([], _)

subset2([H|T], Y) :- member(H, Y), subset2(T, Y)

6.3 Mô phỏng SWI - Prolog:

Đây là một đoạn code Prolog đơn giản có thể kiểm tra xem một danh sách có phải là tập hợpcon của một danh sách khác không:

subset2([], _)

subset2([H|T], Y) :- member(H, Y), subset2(T, Y)

Trong đó, subset2([], _) là một trường hợp cơ sở cho biết rằng một danh sách rỗng là tậphợp con của bất kỳ danh sách nào

subset2([H|T], Y) :- là một quy tắc cho biết rằng nếu phần tử đầu tiên H của danh

sách [H|T] là một phần tử của danh sách Y, và nếu các phần tử còn lại T của danh

sách [H|T] cũng là tập hợp con của danh sách Y, thì [H|T] là tập hợp con của Y

Khi chạy câu hỏi ?- subset2([4,3], [2,3,5,4]) với đoạn code này trong một trình thông dịchProlog, nó sẽ trả về true, cho biết rằng [4,3] là tập hợp con của [2,3,5,4]

Trang 14

Khi chạy câu hỏi ?- takeout(3, [1,2,3], [1,2]) với đoạn code này trong một trình thông dịchProlog, nó sẽ trả về true, cho biết rằng khi lấy ra phần tử 3 từ danh sách [1,2,3], ta đượcdanh sách kết quả [1,2].

Khi chạy câu hỏi ?- takeout(X,[1,2,3],L) với đoạn code này trong một trình thông dịchProlog, nó sẽ trả về nhiều kết quả khác nhau cho biến X và L Điều này cho biết rằng cónhiều cách để lấy ra một phần tử từ danh sách [1,2,3]

7.3 Mô phỏng SWI - Prolog:

Trang 15

8 BÀI TẬP 8.

8.1 Đề bài:

8.2 Lời giải:

getEltFromList([H|_], 0, H)

getEltFromList([_|T], N, E) :- N > 0, N1 is N - 1, getEltFromList(T, N1, E)

8.3.Mô phỏng SWI - Prolog:

Trang 16

9 BÀI TẬP 9.

9.1 Đề bài:

9.2 Lời giải:

maxmin(List, Max, Min) :-max_list(List, Max), min_list(List, Min)

9.3 Mô phỏng SWI - Prolog:

Trang 18

10.3 Mô phỏng SWI - Prolog:

Trang 20

12 BÀI TẬP 12.

12.1 Đề bài:

12.2 Lời giải:

disjoint(List1, List2) :- forall(member(X, List1), \+ member(X, List2))

12.3 Mô phỏng SWI - Prolog:

Trang 21

tử của danh sách L, và mỗi phần tử được kiểm tra bằng cách so sánh kết quả của phép toánvới giá trị mong đợi Nếu mọi phép toán đều đúng đắn, thì câu truy vấn sẽ trả về true.

Ví dụ:

?- forall(member(Result = Formula, [2 = 1 + 1, 4 = 2 * 2]), Result =:= Formula)

true

Trang 22

13.3 Mô phỏng SWI - Prolog:

14 BÀI TẬP 14.

14.1 Đề bài:

Trang 23

14.2 Lời giải:

subset3(Sub, Set) :- forall(member(X, Sub), member(X, Set))

14.3 Mô phỏng SWI - Prolog:

15 BÀI TẬP 15.

15.1.Đề bài:

Trang 24

15.3 Mô phỏng SWI - Prolog:

Có thể sử dụng vị từ append/3 để viết các chương trình Prolog thực hiện các việc sau:

- prefixe(L1, L2): kiểm tra xem danh sách L1 có đứng trước danh sách L2 hay không

- suffixe(L1, L2): kiểm tra xem danh sách L1 có đứng sau danh sách L2 hay không

- isin(L1, L2): kiểm tra xem các phần tử của danh sách L1 có mặt trong danh sách L2 haykhông

Đây là một ví dụ về cách viết các chương trình này:

prefixe(L1, L2) :- append(L1, _, L2)

suffixe(L1, L2) :- append(_, L1, L2)

isin([], _)

isin([H|T], L2) :- member(H, L2), isin(T, L2)

Chương trình prefixe/2 và suffixe/2 sử dụng vị từ append/3 để kiểm tra xem danh

sách L1 có đứng trước hoặc đứng sau danh sách L2 hay không Chương trình isin/2 sử dụng

đệ quy để duyệt qua từng phần tử của danh sách L1 và kiểm tra xem chúng có thuộc danhsách L2 hay không

Ví dụ:

?- prefixe([a,b], [a,b,c,d])

true

Trang 25

?- suffixe([c,d], [a,b,c,d]).

true

?- isin([a,c], [a,b,c,d])

true

Trang 27

16.3 Mô phỏng SWI - Prolog:

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

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