1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu Bài tập thực hành BProlog pptx

5 747 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài tập thực hành BProlog
Thể loại Bài tập thực hành
Định dạng
Số trang 5
Dung lượng 125,4 KB

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

Nội dung

Viết vị từ demchan đếm trên một danh sách có bao nhiêu phần tử là số chẵn.. Viết vị từ ptn nhận đối số là một danh sách cùng số nguyên dương n và in ra phần tử thứ n trong danh sách.. V

Trang 1

Bài tập thực hành BProlog

1 Viết vị từ demchan đếm trên một danh sách có bao nhiêu phần tử là số chẵn

Vd: demchan([4,9,6,5,2],N)  N=3

demchan([],0):-!

demchan([H|T],S):-(H mod 2) =:= 0,demchan(T,S1),S is S1+1,!

demchan([_|T],S):-demchan(T,S)

2 Viết vị từ ptn nhận đối số là một danh sách cùng số nguyên dương n và in ra phần tử thứ n

trong danh sách

Vd: ptn([4,9,6,5,2],2,X)  X=9

dem([],0):-!

dem([_|T],N):-dem(T,N1),N is N1+1,!

ptn([X|_],1,X):-!

ptn([_|Y],M,Z):-M1 is M-1,ptn(Y,M1,Z),!

3 Viết vị từ n_ptdau(N,L,L1,L2) trong đ L1 chứa N phần tử đầu của Lvà L2 chứa phần còn

lại Vị từ này có thể đảo ngược lại

Vd: n_ptdau(3,[1,2,3,4,9,5,6],L1,L2)  L1=[1,2,3], L2=[4,9,5,6]

n_ptdau(N,[a,b,c],[a,b],L2)  N=2, L2=[c]

n_ptdau(0,L,[],L)

n_ptdau(N,[H|T],[H|T1],L2):-n_ptdau(M,T,T1,L2),N is M+1

4 Viết vị từ ptg in ra phần tử giữa trong danh sách số nguyên dương, trả về 0 nếu số phần tử

của danh sách là số chẵn

Vd: ptg([4,9,6,5,2],X)  X=6

ptg([4,9,5,2],X)  X=0

dem([],0):-!

dem([_|T],N):-dem(T,N1),N is N1+1,!

ptn([X|_],1,X):-!

ptn([_|Y],M,Z):-M1 is M-1,ptn(Y,M1,Z),!

ptg([A|B],C):-dem([A|B],K),(K mod 2) =:= 1,K1 is K/<2,K2 is

K1+1,ptn([A|B],K2,C),!

ptg([A|B],0):-dem([A|B],K),(K mod 2) =:= 0,!

5 Viết vị từ hoi, hieu, giao thực hiện phép hội, hiệu và giao trên hai danh sách

Vd: hoi([1,2,3,4,5],[3,4,5,6,7,8],X)  X=[1,2,3,4,5,6,7,8]

hieu([1,2,3,4,5],[3,4,5,6,7,8],X)  X=[1,2]

giao([1,2,3,4,5],[3,4,5,6,7,8],X)  X=[3,4,5]

tim([H|_],H):-!

Trang 2

tim([_|T],X):-tim(T,X)

hoi([],X,X):-!

hoi([H|T],X,[H|T1]):-not(tim(X,H)),hoi(T,X,T1),!

hoi([_|T],X,T1):-hoi(T,X,T1)

Vd: dao([1,2,3,4,5],L)  L=[5,4,3,2,1]

tim([H|_],H):-!

tim([_|T],X):-tim(T,X)

giao([],_,[]):-!

giao([H|T1],L2,[H|T3]):-tim(L2,H),giao(T1,L2,T3),!

giao([_|T1],L2,L3):-giao(T1,L2,L3)

6 Viết vị từ dao nhận đối số là một danh sách và in ra danh sách đảo của nó

Vd: dao([1,2,3,4,5],L)  L=[5,4,3,2,1]

noi([],X,[X])

noi([H|T],X,[H|T1]):-noi(T,X,T1)

dao([],[])

dao([H|T],L):-dao(T,L1),noi(L1,H,L)

7 Viết vị từ chen(L,E,R) – R là danh sách L trong đó E đã được chèn vào đúng vị trí (giả sử L

đã được sắp theo thứ tự giảm)

Vd: chen( [5,4,2,1],3,R)  R=[5,4,3,2,1]

chen([],E,[E])

chen([H|T],E,[E|[H|T]]):-H>E,!

chen([H|T],E,[H|T3]):-chen(T,E,T3)

8 Viết vị từ chenDS(L1,L2,L3) – L3 là danh sách L2 đã được chèn vào tất cả nhừng phần tử

của danh sách L1

Vd: chenDS( [3,2,5],[6,4,1],L)  L=[6,5,4,3,2,1]

chen([],E,[E])

chen([H|T],E,[E|[H|T]]):-H<E,!

chen([H|T],E,[H|T3]):-chen(T,E,T3)

chenDS([],L,L)

chenDS([H|T],L2,L3):-chen(L2,H,L4),chenDS(T,L4,L3)

9 Viết vị từ saptang và sapgiam nhận đối số là một danh sách và sắp danh sách theo thứ tự

tăng hoặc giảm

Vd: sapgiam([1,2,3,4,5,6],Y)  Y=[6,5,4,3,2,1]

saptang([8,12,4,7,3,9,5],Y)  Y=[3,4,5,7,8,9,12]

chen(X,[],[X]):-!

chen(X,[H|T],[X|[H|T]]):-X=<H,!

chen(X,[H|T],[H|T1]):-chen(X,T,T1)

saptang([H],[H]):-!

Trang 3

saptang([H|T],T2):-saptang(T,T1),chen(H,T1,T2)

chenn(X,[],[X]):-!

chenn(X,[H|T],[X|[H|T]]):-X>=H,!

chenn(X,[H|T],[H|T1]):-chenn(X,T,T1)

sapgiam([H],[H]):-!

sapgiam([H|T],T2):-sapgiam(T,T1),chenn(H,T1,T2)

10 Viết vị từ chiahai chia danh sách ra làm hai danh sách con bằng nhau, danh sách con thứ

nhất sắp theo thứ tự tăng và danh sách con thứ hai sắp theo thứ tự giảm

Vd: chiahai([1,2,3,4,5,6],Y,Z)  Y=[1,2,3], Z=[6,5,4]

chiahai([8,12,4,7,3,9,5],Y,Z)  Y=[4,7,8,12], Z=[9,5,3]

dem([],0):-!

dem([_|T],N):-dem(T,N1),N=N1+1

chen(X,[],[X]):-!

chen(X,[H|T],[X|[H|T]]):-X=<H,!

chen(X,[H|T],[H|T1]):-chen(X,T,T1)

saptang([H],[H]):-!

saptang([H|T],T2):-saptang(T,T1),chen(H,T1,T2)

chenn(X,[],[X]):-!

chenn(X,[H|T],[X|[H|T]]):-X>=H,!

chenn(X,[H|T],[H|T1]):-chenn(X,T,T1)

sapgiam([H],[H]):-!

sapgiam([H|T],T2):-sapgiam(T,T1),chenn(H,T1,T2)

phan(T,0,[],T):-!

phan([H|T],N,[H|T1],Y):-N1 is N-1,phan(T,N1,T1,Y)

chiahai(X,Y,Z):-dem(X,N),(N mod 2) =:= 0,N1 is

N/2,phan(X,N1,Y1,Z1),saptang(Y1,Y),sapgiam(Z1,Z)

chiahai(X,Y,Z):-dem(X,N),N1 is

(N/>2),phan(X,N1,Y1,Z1),saptang(Y1,Y),sapgiam(Z1,Z)

11 Viết vị từ xenke(L1,L2,L3) trong đó danh sách L3 được tạo nên bằng cách lấy xen kẽ các

phần tử của L1 và L2

Vd: xenke([1,3,5],[2,4,6],L)  L=[1,2,3,4,5,6]

xenke(L,L2,L3):-buoc(0,L,L2,L3)

buoc(_,[],L,L)

buoc(_,L,[],L)

buoc(N,[H|T],L2,[H|T3]):-N mod 2=:=0,N1 is N+1,buoc(N1,T,L2,T3),! buoc(N,L,[H|T2],[H|T3]):-N1 is N+1,buoc(N1,L,T2,T3)

Trang 4

12 Viết vị từ xoaptdau nhận đối số là một danh sách cùng số nguyên dương X và xóa phần tử

bằng X đầu tiên trong danh sách

Vd: xoaptdau([4,9,6,5,2],6,L)  L=[4,9,5,2]

xoaptdau([4,9,6,5,9,2],9,L)  L=[4,6,5,9,2]

xoaptdau([H|T],H,T):-!

xoaptdau([H|T],X,[H|T1]):-xoaptdau(T,X,T1)

13 Viết vị từ xoapt nhận đối số là một danh sách cùng số nguyên dương X và xóa tất cả những

phần tử bằng X trong danh sách

Vd: xoapt ([4,9,6,5,2,6,3,6],6,L)  L=[4,9,5,2,3]

xoapt([],_,[]):-!

xoapt([H|T],H,T1):-xoapt(T,H,T1),!

xoapt([H|T],X,[H|T1]):-xoapt(T,X,T1)

14 Viết vị từ thaythe(X,Y,L,R) trong đó R là danh sách L mà tất cả các phần tử X đã được thay

thế bằng Y

Vd: thaythe(1,8,[1,2,3,4,1,5,6],L)  Y=[8,2,3,4,8,5,6]

thaythe(_,_,[],[])

thaythe(H,K,[H|T],[K|T2]):-thaythe(H,K,T,T2),!

thaythe(X,Y,[H|T],[H|T2]):-thaythe(X,Y,T,T2)

15 Viết vị từ xoadsc(L1,L2,L3) trong đó L3 là danh sách L1 đã xóa đi lần xuất hiện đầu tiên của

danh sách L2 (nếu L2 là danh sách con của L1)

Vd: xoadsc([1,2,3,4,1,5,6],[4,1])  Y=[1,2,3,5,6]

xoadsc([1,2,3,4,1,5,6],[1,4])  Y=[1,2,3,5,6]

xoadsc([H|T],[H],T):-!

xoadsc([H|[H1|T]],[H|[H1|T1]],X):-xoadsc([H1|T],[H1|T1],X),!

xoadsc([H|T],[H1|T1],[H|T2]):-xoadsc(T,[H1|T1],T2)

16 Viết vị từ xoaxhds(L1,L2,L3) trong đó L3 là danh sách L1 đã xóa đi tất cả những lần xuất

hiện của danh sách L2 (nếu L2 là danh sách con của L1)

Vd: xoaxhds([1,2,3,4,1,2,5,6],[1,2])  Y=[3,4,5,6]

xoadsc([H|T],[H],T):-!

xoadsc([H|[H1|T]],[H|[H1|T1]],X):-xoadsc([H1|T],[H1|T1],X),! xoadsc([H|T],[H1|T1],[H|T2]):-xoadsc(T,[H1|T1],T2)

ktdsc([H|_],[H],1):-!

ktdsc([H|[H1|T]],[H|[H1|T1]],M):-ktdsc([H1|T],[H1|T1],M1),M=M1+1,! ktdsc([_|T],[H1|T1],M):-ktdsc(T,[H1|T1],M),!

dem([],0):-!

dem([_|T],N):-dem(T,N1),N=N1+1

ktds(X,X1):-ktdsc(X,X1,M),dem(X1,N),M=:=N

xoaxhds([],_,[]):-!

Trang 5

xoaxhds([H|T],[H1|T1],Y):-ktds([H|T],[H1|T1]),xoadsc([H|T],[H1|T1],X),xoaxhds(X,[H1|T1],Y),! xoaxhds([H|T],[H1|T1],[H|T2]):-xoaxhds(T,[H1|T1],T2)

Ngày đăng: 12/12/2013, 15:15

TỪ KHÓA LIÊN QUAN

w