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 2 0
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.

Đ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

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.

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 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í Minh, tháng 03 năm 2023 MỤC LỤC PHẦN 1: BÀI TẬP CHƯƠNG 1 BÀI TẬP 1.1 Đề bài: .1 1.2 Lời giải: 1.3 Mô SWI-Prolog BÀI TẬP 2.1 Đề bài: .2 2.2 Lời giải: 2.3 Mô SWI-Prolog: BÀI TẬP 3.1 Đề bài: .3 3.2 Lời giải: 3.3 Mô SWI - Prolog: BÀI TẬP 4.1 Đề bài: 4.2 Lời giải: 4.3 Mô SWI - Prolog: BÀI TẬP 5.1 Đề bài: 5.2 Lời giải: BÀI TẬP 6.1 Đề bài: 6.2 Lời giải: 6.3 Mô SWI - Prolog: BÀI TẬP 7.1 Đề bài: 7.2 Lời giải: 7.3 Mô SWI - Prolog: BÀI TẬP 10 8.1 Đề bài: 10 8.2 Lời giải: 10 8.3 Mô SWI - Prolog: 10 BÀI TẬP 11 9.1 Đề bài: 11 9.2 Lời giải: 11 9.3 Mô 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ô 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ô SWI - Prolog: 14 12 BÀI TẬP 12 15 12.1 Đề bài: 15 12.2 Lời giải: 15 12.3 Mô 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ô 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ô 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ô 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ô 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ô SWI - Prolog: 23 Môn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức PHẦN 1: BÀI TẬP CHƯƠNG BÀI TẬP 1.1 Đề bài: 1.2 Lời giải: Giải: remove_last_three(L, L1) :- append(L1, [_,_,_], L) 1.3 Mô SWI-Prolog Môn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức BÀI TẬP 2.1 Đề bài: 2.2 Lời giải: remove_first_and_last_three(L, L2) :- append([_,_,_], L1, L), append(L2, [_,_,_], L1) 2.3 Mơ SWI-Prolog: 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: 3.2 Lời giải: last_element_append(Object, List) :- append(_, [Object], List) last_element_no_append(Object, [Object]) last_element_no_append(Object, [_|T]) :- last_element_no_append(Object, T) 3.3 Mơ SWI - Prolog: Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức BÀI TẬP 4.1 Đề bài: 4.2 Lời giải: even_length([]) even_length([_,_|Tail]) :- even_length(Tail) odd_length([_]) odd_length([_,_|Tail]) :- odd_length(Tail) 4.3 Mô SWI - Prolog: 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 Đề bài: 5.2 Lời giải: ?- [1,2,3] = [1|X] trả true gán giá trị cho biến X [2,3] Điều có nghĩa danh sách [1,2,3] viết dạng [1|[2,3]] ?- [1,2,3] = [1,2|X] trả true gán giá trị cho biến X [3] Điều có nghĩa danh sách [1,2,3] viết dạng [1,2|[3]] ?- [1|[2,3]] = [1,2,X]., Prolog trả true gán giá trị cho biến X Điều có nghĩa danh sách [1|[2,3]] viết dạng [1,2,3] ?- [1|[2,3,4]] = [1,2,x]., Prolog trả false hai danh sách khơng giống cấu trúc ?- [1|[2,3,4]] = [1,2|X]., Prolog trả true gán giá trị cho biến X [3,4] Điều có nghĩa danh sách [1|[2,3,4]] viết dạng [1,2|[3,4]] ?- b(o,n,j,o,u,r) = L., Prolog trả true gán giá trị cho biến L [b,o,n,j,o,u,r] Điều có nghĩa cấu trúc b(o,n,j,o,u,r) viết dạng danh sách thành phần ?- bon(Y) = [X,jour]., Prolog trả true gán giá trị cho biến X bon biến Y jour Điều có nghĩa cấu trúc bon(Y) viết dạng danh sách thành phần Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức Khi chạy câu hỏi ?- takeout(3, [1,2,3], [1,2]) với đoạn code trình thơng dịch Prolog, trả true, cho biết lấy phần tử từ danh sách [1,2,3], ta danh sách kết [1,2] Khi chạy câu hỏi ?- takeout(X,[1,2,3],L) với đoạn code trình thơng dịch Prolog, trả nhiều kết khác cho biến X L Điều cho biết có nhiều cách để lấy phần tử từ danh sách [1,2,3] 7.3 Mô SWI - Prolog: Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức BÀI TẬP 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ô SWI - Prolog: 10 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức BÀI TẬP 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ơ SWI - Prolog: 11 Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức 10 BÀI TẬP 10 10.1 Đề bài: 10.2 Lời giải: flatten([], []) my_flatten(X,[X]) :- \+ is_list(X) my_flatten([],[]) my_flatten([X|Xs],Zs) :- my_flatten(X,Y), my_flatten(Xs,Ys), append(Y,Ys,Zs) 12 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 10.3 Mô SWI - Prolog: 11 BÀI TẬP 11 11.1 Đề bài: 11.2 Lời giải: % Kiểm tra xem phần tử có thuộc tập hợp hay không ?- member(a, [a, b, c]) true % Tìm hợp hai tập hợp ?- union([a, b], [b, c], Union) 13 Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức Union = [a, b, c] % Tìm giao hai tập hợp ?- intersection([a, b], [b, c], Intersection) Intersection = [b] % Kiểm tra xem tập hợp có tập tập hợp khác hay không ?- subset([a], [a, b]) true 11.3 Mô SWI - Prolog: 14 Môn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 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ô SWI - Prolog: 15 Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức 13 BÀI TẬP 13 13.1 Đề bài: 13.2 Lời giải: Vị từ forall(Cond, Action) thực kiểm tra so khớp tương ứng Cond Action Nếu Cond cho trường hợp, Action phải cho trường hợp Trong ví dụ bạn, forall/2 sử dụng để kiểm tra xem phép toán số học danh sách L có đắn hay khơng Vị từ member/2 sử dụng để duyệt qua phần tử danh sách L, phần tử kiểm tra cách so sánh kết phép toán với giá trị mong đợi Nếu phép toán đắn, câu truy vấn trả true Ví dụ: ?- forall(member(Result = Formula, [2 = + 1, = * 2]), Result =:= Formula) true 16 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 13.3 Mô SWI - Prolog: 14 BÀI TẬP 14 14.1 Đề bài: 17 Môn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức 14.2 Lời giải: subset3(Sub, Set) :- forall(member(X, Sub), member(X, Set)) 14.3 Mô SWI - Prolog: 15 BÀI TẬP 15 15.1 Đề bài: 18 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 15.2 Lời giải: prefixe(L1, L2) :- append(L1, _, L2) suffixe(L1, L2) :- append(_, L1, L2) isin([], _) isin([H|T], L2) :- member(H, L2), isin(T, L2) 15.3 Mơ SWI - Prolog: Có thể sử dụng vị từ append/3 để viết chương trình Prolog thự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 phần tử danh sách L1 có mặt danh sách L2 hay khơng Đây ví dụ cách viết 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 suffixe/2 sử dụng vị từ append/3 để kiểm tra xem danh sách L1 có đứng trước đứng sau danh sách L2 hay khơng Chương trình isin/2 sử dụng đệ quy để duyệt qua phần tử danh sách L1 kiểm tra xem chúng có thuộc danh sách L2 hay khơng Ví dụ: ?- prefixe([a,b], [a,b,c,d]) true 19 Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức ?- suffixe([c,d], [a,b,c,d]) true ?- isin([a,c], [a,b,c,d]) true 20 Môn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 16 BÀI TẬP 16 16.1 Đề bài: 16.2 Lời giải: quicksort([], []) quicksort([H|T], Sorted) :- partition(T, H, Less, Greater), quicksort(Less, SortedLess), quicksort(Greater, SortedGreater), append(SortedLess, [H|SortedGreater], Sorted) partition([], _, [], []) partition([H|T], Pivot, [H|Less], Greater) :- H =< Pivot, partition(T, Pivot, Less, Greater) partition([H|T], Pivot, Less, [H|Greater]) :- H > Pivot, partition(T, Pivot, Less, Greater) 21 Mơn học: Lập trình logic ràng buộc GVHD: TS Phan Văn Đức 16.3 Mơ SWI - Prolog: 22 Mơn học: Lập trình logic ràng buộc GVHD:TS Phan Văn Đức 17 BÀI TẬP 17 17.1 Đề bài: 17.2 Lời giải: 17.3 Mô SWI - Prolog: 23

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

Mục lục

  • 3.3.Mô phỏng SWI - Prolog:

  • 4.3.Mô phỏng SWI - Prolog:

  • 6.3.Mô phỏng SWI - Prolog:

  • 7.3.Mô phỏng SWI - Prolog:

  • 8.3.Mô phỏng SWI - Prolog:

  • 9.3.Mô phỏng SWI - Prolog:

  • 10.3.Mô phỏng SWI - Prolog:

  • 11.3.Mô phỏng SWI - Prolog:

  • 12.3.Mô phỏng SWI - Prolog:

  • 13.3.Mô phỏng SWI - Prolog:

  • 14.3.Mô phỏng SWI - Prolog:

  • 15.3.Mô phỏng SWI - Prolog:

  • 16.3.Mô phỏng SWI - Prolog:

  • 17.3.Mô phỏng SWI - Prolog:

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

Tài liệu liên quan