Tải bản đầy đủ (.ppt) (18 trang)

Lec 11 13 prologh DANH SACH

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 (312.16 KB, 18 trang )

S ROLOG
WI

• Hiện nay đã có nhiều hệ lập trình logic ra đời mà tiêu
biểu là Prolog. Prolog là viết tắt của cụm từ tiếng
Pháp ”Programmation en Logique”
• Hệ Prolog đầu tiên ra đời vào năm 1973 do Alain
Colmerauer và nhóm trí tuệ nhân tạo thuộc Đại học
tổng hợp Aix-Marseilie, Pháp xây dựng.
• Mục đích ban đầu của hệ này là dịch các ngôn ngữ tự
nhiên.
1


• Điều khác nhau căn bản của lập trình Prolog so với
lập trình truyền thống là:
• • Trong Prolog người lập trình mô tả vấn đề bằng các
câu trong logic.
• • Hệ sẽ sử dụng lập luận logic để tìm ra các câu trả
lời cho vấn đề.

2


• Một chương trình Prolog gồm một dãy các luật có
dạng:
A :- B1, ..., Bm
• trong đó, m ≥ 0, A và Bi (i = 1, ..., m) là các câu phân
tử. Luật trên được đọc là “A nếu B1 và ... và
• Bm”. Nó là cách viết trong Prolog của logic mênh đề
sau:


• A B B m ⇒ ∧ ∧… 1
• Trong luật trên, A được gọi là đầu, danh sách các câu
Bi (B1, ..., Bm) được gọi là thân của luật.
• Nếu m=0, ký hiệu “:-” sẽ được bỏ đi, khi đó ta có câu
phân tử A và nó được gọi là một sự kiện.
3


Ví dụ.
• Giả sử chúng ta biết các thông tin sau đây về An và Ba:
• An yêu thích mọi môn thể thao mà cậu chơi.
• Bóng đá là môn thể thao.
• Bóng bàn là môn thể thao.
• An chơi bóng đá.
• Ba yêu thích mọi thứ mà An yêu thích.
=> Các câu trên được chuyển thành 1 chương trình Prolog sau :
• likes(an, X) :- sport(X), plays(an, X)
• sport(football).
• sport(tennis).
• plays(an, football).
• likes(ba, Y) :- likes(an, Y).
=> Câu hỏi : “An yêu thích cái gì ?”:
? - likes(an, X).

4


5



S ROLOG
WI

Ti ết
3:
TRÚC DANH

CẤU TRÚC DANH SÁCH

Giáo

sinh thực hiện: Đặng Thị Mỹ Bình
6


NỘI DUNG

I

Biễu diễn cấu trúc danh sách

II

Một số vị từ xử lí danh sách

III Các thao tác cơ bản trên danh sách
4

7



I. Biễu diễn cấu trúc danh sách

- Danh sách là kiểu dữ liệu có cấu trúc được sử dụng rộng

rãi trong các ngôn ngữ lập trình phi số
- Một danh sách (list) là một dãy các phần tử cùng kiểu
Ví dụ: [ann, tennis, tom, skiing] là một list được viết ở Prolog

- Chú ý rằng các list được diễn tả trong Prolog bằng các
cây nhị phân

8


.
- List rỗng được diễn tả bởi [ ]
Một list khác rỗng gồm có
hai thành phần:
 Phần tử đầu tiên
(head)
 Phần đuôi của list (tail)
-

Head

ann

.


tennis

.

tom
skiing

Tail

.
[]

Các phần tử của 1 list có thể là bất kì loại đối tượng nào, kể cả
1 list.

9


• Prolog cung cấp ba cách viết danh sách
– [Item1, Item2, ...]
– [Head | Tail]
– [Item1, Item2, ... | others]

Prolog dùng dấu | (split) để tách biệt phần head và tail của list
.
L= [ann, tennis, tom, skiing]
L= [ann | [tennis, tom, skiing]]
L= [ann, tennis, tom, skiing | []]
HOẶC:
L= [ann | tennis | [tom, skiing]]


….

ann

.

tennis

.

tom
skiing

.
[]
10


II. Một số vị từ xử lí danh sách: có sẵn trong Prolog
VỊ TỪ
1. member(X,L).

Ý NGHĨA
Kiểm tra xem X có phải là
một phần tử của danh sách
L không.

2. append(L1,L2,L). Ghép danh sách L1 và L2
vào thành L

3. nextto(X,Y,L).

4. select(X,L,L1).

Kiểm tra xem Y có đứng
ngay sau X trong L không.
Lấy X ra khỏi L để trả về
phần tử còn lại trong L1.
- Có thể dùng để chèn thêm 1 phần
tử vào danh sách.

VÍ DỤ
1 ?- member(a,[a,b,c]).
Yes

2 ?- append([a,b,c],[1,2],L).
L = [a, b, c, 1, 2]
Yes
3 ?- nextto(b,a,[a,b,c]).
No
4 ?- select(3,[3,4,2],L).
L=[4,2]
Yes

11


VỊ TỪ

Ý NGHĨA


VÍ DỤ

5. nth0(Index,L,X).

Kiểm tra xem phần tử thứ
Index (tính từ 0) của L có
phải là X không.

1 ?- nth0(1,[a,b,c],a).
No

6. nth1(Index,L,X).

Kiểm tra xem phần tử thứ
Index (tính từ 1) của L có
phải là X không.

2 ?- nth1(1,[a,b,c],a).
Yes

7. last(L,X).

Kiểm tra xem X có đứng
cuối trong L không.

3 ?- last([a,b,c,d],d).
Yes

8. reverse(L1,L2).


Nghịch đảo danh sách L1,
kết quả trả về L2.

4 ?- reverse([a,b,c],L).
L=[c,b,a]

9.Permutation(L1,L2).Danh sách L2 là hoán vị của 5 ?- Permutation([a,b ,c], L) .
danh sách L1
12


III. Các thao tác cơ bản trên danh sách
1. Kiểm tra một phần tử X có mặt trong danh sách L:

* Xây dựng lại một số vị từ có sẵn.
member (X , L).

Ví dụ:
=>
tử X thuộc danh sách L nếu:
1 ?-Phần
member(a,[a,b,c,d]).
1.
Yes X là đầu của L, hoặc nếu
2 ?- X
member(d,[a,b,[c,d
2.
là một phần tử của]]).
đuôi của L


.

a

.

b

.

c
d

[]

No Xây dựng lại hai điều kiện trên thành hai mệnh đề:

3 ?- member([c,d],[a,b,[c,d]]).
Sự kiện: member (X, [X | Tail]).
Yes

Luật:

member (X, [Head | Tail]) :- member(X,Tail).
13


2. Ghép hai danh sách
append (L1, L2, L).

- Xây dựng lại vị từ này:

- Có thể dùng append để phân tách danh sách đã cho thành danh

Xmới
ét hai
hợp:L1 và L2, kết quả trả về L
sách
-Ghép
haitrường
danh sách
VíVí
dụ1.
: 1: Nếu
?- append
(L1,
L2, [a,b,c]
). b],
L1
= rỗng
thì([a,
viết
như
append ([], L, L).
dụ
1 ?append
[c,sau:
d], L).

= []

2. L1Nếu
L1
≠[a,
rỗng
thìd] nó gồm một đầu và một đuôi
L=
b,
c,
L2 = [a, b, c];
như
sau:
[X
|
L1]
L1 = [a] Yes
Kết
phép ghép danh sách là:
L2 quả
= [b, c];
L1 = [a, b([X
]; | L1], L2, [X | L3]) :- append (L1, L2, L3).
append


X

L2

L1
L3


14


3. Nghịch đảo danh sách
reverse (L1, L2).
.

- Nghịch đảo danh sách L1, kết quả trả
về danh sách L2.
- Ví dụ:
1 ?- reverse([a, b, c, d], L).
L = [d, c, b, a]
Yes

.

a

.

b

.

c
d

[]


- Thủ tục nghịch đảo được viết như sau:
Reverse ([], []).
Reverse ([X | Tail], L) :- Reverse (Tail, L1), append (L1, [X], L).
Trong đó: L1 là danh sách nghịch đảo trung gian.
15


4. Hoán vị danh sách
permutation (L1, L2).
- Danh sách L2 là hoán vị của danh sách L1.
- Ví dụ: 1 ?- permutation([a, b, c], L) .

L = [a,b,c] ;
L = [a,c,b] ;
L = [c,b,a] ;

- Thủ tục hoán vị được viết trong Prolog như sau:

permutation ([], []).
permutation ([X | L], P) :- permutation(L, L1), insert(X, L1, P).
16


H·y nhí!
[Item 1, Item 2,… ]

[Head | Tail ]

[Item 1, Item 2,… | Others ]


 Danh sách là một cấu trúc hoặc
rỗng hoặc gồm hai phần: Head và
Tail.

 Prolog quản lí danh sách theo cấu
trúc cây nhị phân và có nhiều cách
biểu diễn DS

 Các thao tác thường dùng với danh
với Tail, Others là các danh sách

sách là: kiểm tra xem một phần tử có
thuộc DS không, nghịch đảo danh
sách, hoán vị danh sách,…
17


Bài tập về nhà

1

Bổ sung một phần tử vào danh sách.

2

Loại bỏ một phần tử ra khỏi danh sách.

18




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×