Tải bản đầy đủ (.pdf) (12 trang)

TỔNG HỢP CÁC LỜI GIẢI CÁC BÀI TẬP PROLOG KIỂM TRA GIỮA KÌ CAO HỌC ĐH GTVT TP HCM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 12 trang )

BÀI TẬP KIỂM TRA GIỮA KỲ
Mơn học Lập trình Logic và ràng buộc
Học viên: Nguyễn Duy Quốc Thái
1. Viết chương trình find_max và find_min tìm Min và Max của hai số?

2. Tìm phần tử
-

Tìm phần tử cuối cùng của danh sách:
?- member( c, [ a, b, c ] )
Yes
Tìm phần tử kề cuối của danh sách? (phần tử cuối cùng thứ 2):
Tìm phần tử thứ K của một danh sách:
? - member_at(X, [a, b, c, d], 2, R).
X=b
R = [a, c, d]

-

Tìm số phần tử của danh sách?
?- length( [ a, b, c, d, e ], L ).
L=5
Yes
?- length( [ a, [ b, c ], d, e ], N ).
N=4
Yes


3. Đảo ngược danh sách?

4. Tìm xem một danh sách có phải là một palindrome hay khơng? Một


palindrome có thể được đọc về phía trước hoặc phía sau; ví dụ: [x, a, m,a, x].
?- palindrome([ x, a, m, a, x ]).
Yes


5. Loại bỏ các phần tử danh sách trùng lặp liên tiếp?
Ví dụ:
:? - remove([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
1X = [a, b, c, a, d, e]

6. Đóng gói các phần tử danh sách trùng lặp liên tiếp thành danh sách con?
Ví dụ:
:? - pack([a, a, a, a, b, c, c, a, a, d, e, e, e, e], X).
X = [[a, a, a, a], [b], [c, c], [a, a], [d], [e, e, e, e]]

7. Sao chép các phần tử của danh sách?
Ví dụ:
:? - Dupli([a, b, c, c, d], X).
X = [a, a, b, b, c, c, c, c, d, d]

8.

Nhân đôi các phần tử của danh sách một số lần nhất định?
Ví dụ:
:? - Dupli([a, b, c], 3, X).
X = [a, a, a, b, b, b, c, c, c]

9. Bỏ mọi phần tử thứ N khỏi danh sách?
Ví dụ:
:? - drop([a, b, c, d, e, f, g, h, i, k], 3, X).

X = [a, b, d, e, g, h, k]

10. Chia danh sách thành hai phần; chiều dài của phần đầu tiên đã cho?
Ví dụ: :? - split([a, b, c, d, e, f, g, h, i, k], 3, L1, L2).
L1 = [a, b, c]
L2 = [d, e, f, g, h, i, k


11.Xóa phần tử K khỏi danh sách?
Ví dụ:
? - remove_at(X, [a, b, c, d], 2, R).
X=b
R = [a, c, d]


Mơn học: Lập trình logic và ràng buộc

Bài 1 :
+ Tìm Max: X là max khi X >= Y và ngược lại
find_max(X,Y,X):-X>=Y.
find_max(X,Y,Y):-X
2

TS. Phan Văn Đức


Mơn học: Lập trình logic và ràng buộc
+ Tìm Min : X là min khi X find_min(X,Y,X):-X

find_min(X,Y,Y):-X>=Y.

Bài 2 :
- Tìm phần tử cuối của danh sách :
last([H],H).
last([H|T],L):-last(T,L).

3

TS. Phan Văn Đức


Mơn học: Lập trình logic và ràng buộc

TS. Phan Văn Đức

- Kiểm tra phần tử K có thuộc danh sách :
member(Z,[H|T]).
member((Z,[_|T]):-member(Z,T).

- Tìm số phần tử của danh sách :
sumMem([],0).
sumMem([_|T],N):-sumMem(T,N1), N is N1 +1.

Bài 3 :
Sử dụng lệnh reverse với quy tắc reverse([Danh sách],Kết_quả).

4



Mơn học: Lập trình logic và ràng buộc

TS. Phan Văn Đức

Trong đó, danh sách là [a,b,c,d,e,f], L là kết quả xuất ra danh sách ngược.
Bài 4 :
palindrome(X):-reverse(X,X).

Bài 5 :
remove([],[]).
remove([H|T],X):-remove(T,[H],Z),reverse(Z,X).
remove([],X,X).
remove([H|T],[K|Z],X):-H=K,remove(T,[H|Z],X).
remove([H|T],[K|Z],X):-H\=K,remove(T,[H,K|Z],X).

5


Mơn học: Lập trình logic và ràng buộc
Bài 6 :
pack(X,Y) :- pack(X,[],_,Y).
pack([H,H|T],Acc,X,R) :- pack([H|T],[H|Acc],X,R).
pack([H,H1|T], Acc, X,R) :H\=H1,
Acc1=[H|Acc],
append(X, [Acc1], X1),
pack([H1|T],[],X1,R).
pack([H], Acc, X,R) :Acc1=[H|Acc],
append(X, [Acc1], X1),
R = X1.


6

TS. Phan Văn Đức


Mơn học: Lập trình logic và ràng buộc

TS. Phan Văn Đức

Bài 7 :
dups([],[]).
dups([H|T],[H,H|T2]):-dups(T,T2).

Bài 8 :
appendlist([], X, X).
appendlist([H|T], L1, [H|L2]) :- appendlist(T, L1, L2).
dupli([], M, []) :-!.
dupli([X], 1, [X]) :-!.
dupli([X], M, [X|L]) :- N is M - 1, dupli([X], N, L), !.
dupli([H|T], M, L1) :- dupli([H], M, H1), dupli(T, M, T1), appendlist(H1, T1, L1), !.

7


Mơn học: Lập trình logic và ràng buộc
Bài 9 :
drop(L, N, X):drop2(L, N, X, N).
drop2(_, _, _, 1).
drop2(L, N, X, C):N mod C =:= 0,
remove(L, N, X),

Z is C-1,
drop2(L, N, X, Z).
drop2(L, N, X, C):Z is C-1,
drop2(L, N, X, Z).
remove([_|T], 1, T).
remove([H|T1], N, [H|T2]):N > 1,
Z is N - 1,
remove(T1, Z, T2).

8

TS. Phan Văn Đức


Mơn học: Lập trình logic và ràng buộc

Bài 10 :
split([],[],[]).
split([X],[X],[]).
split([X,Y|T],[X|L1],[Y|L2]):-split(T,L1,L2).

Bài 11 :
remover( _, [], []).
remover( R, [R|T], T2) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).

9

TS. Phan Văn Đức




×