Danh mục

Bài giảng Chương 2: Kỹ thuật lập trình prolog (Prolog Programming Techniques)

Số trang: 68      Loại file: pdf      Dung lượng: 395.36 KB      Lượt xem: 8      Lượt tải: 0    
Xem trước 7 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng Chương 2: Kỹ thuật lập trình prolog (Prolog Programming Techniques) bao gồm những nội dung về cách biểu diễn list, số học, cách biểu diễn cấu trúc, điều khiển backtracking, xuất/nhập, một số vị từ thư viện quan trọng.
Nội dung trích xuất từ tài liệu:
Bài giảng Chương 2: Kỹ thuật lập trình prolog (Prolog Programming Techniques)Chapter 2 KỸ THUẬT LẬP TRÌNH PROLOG (Prolog Programming Techniques) 1Nội dung Caùch bieåu dieãn list Soá hoïc Caùch bieåu dieãn caáu truùc Ñieàu khieån backtracking Xuaát/nhaäp Moät soá vò töø thö vieän quan troïng 2CÁCH BIỂU DIỄN LIST List là một cấu trúc dữ liệu đơn giản được dùng trong lập trình phi số học. Một list là một chuỗi với số lượng bất kỳ của các phân tử . Thí dụ: [ann, tennis, tom, skiing] là một list ở PROLOG Tuy nhiên đấy chỉ là hình thức bên ngoài của list. Lưu ý rằng, mọi đối tượng có cấu trúc ở PROLOG được diễn tả bằng cấu trúc cây. list cũng vậy.  Một list rỗng được diễn tả bởi [ ]  Một list khác rỗng được coi như gồm hai thành phần: Phần tử đầu tiên của list được gọi là đầu (head) của list Phần con lại của list được gọi là đuôi (tail) của list Trong thí dụ trên, ann là đầu của list và [ tenmis, tom, skiing] là đuôi của list. 3 Một cách tổng quát , head và tail của một list được phối hợp lại thành ra một cấu trúc nhờ một hàm tử đặc biệt. Việc chọn hàm tử này tuỳ thuộc vào Prolog cụ thể. Ở đây giả định rằng đó là dấu chấm . .( Head, Tail) Thí dụ: .( ann, .( tennis,. ( tom, .(skiing, [])))) . . ann . tennis . tom skiing [ ] 4 Một list mà chỉ gồm một phần tử tương đương với : [skiing] = .(skiing, [ ]) Lối ký hiệu dấu chấm không dễ dùng bằng lối ký hiệu [ , ]. Lập trình viên có thể dùng cả hai lối ký hiệu, nhưng lối ký hiệu dấu ngoặc vuông thông dụng hơn. Nhưng hãy nhớ rằng các list được diễn tả bên trong bằng các cây nhị phân. Các phần tử của một list cũng có thể là bất kỳ loại đối tượng nào, kể cả các list. Đuôi của một list có thể được coi như là một đối tượng.Thí dụ: L = [ a,b,c ] Tail = [b, c] và L = .(a, Tail ) 5 Trong lối ký hiệu dấu ngoặc vuông, Prolog đưa vào dấu để tách biệt đầu và đuôi của list L = [ a Tail ] [ a,b,c ] = [ a [b,c] ] = [ a,b [c] ] = [ a,b,c [ ] ] Tóm lại: Prolog cung cấp 3 cách viết : [Item1, Item2, … ] [Head Tail ] [Item1, Item2, …… Others ] 6CÁC THAO TÁC TRÊN LIST2.1 Quan heä thaønh vieân: Vò töø member( X , L ) xeùt xem X coù phaûi laø moät phaàn töû cuûa list L. Thí duï: member( b, [ a,b,c ]) true member( b, [ a| [b, c] ]) falsemember( X, [ X _ ]).member( X, [ Head Tail ]):- member( X, Tail). 7Ghép kề ( Concatenrtion) Vị từ: conc(L1, L2 , L3 ): L3 là sự ghép kề L1 và L2. Thí dụ : conc( [a,b ], [c,d ], [a,b,c,d] ) true conc([], L , L ). conc([ X L1], L2, [ X, L3 ]) :- conc( L1 , L2, L3). Ta có thể dùng conc để phân rã một list thành rã hai list : ?- conc( L1, L2, [ a,b,c] ). L1 = [ ] L2 = [ a,b,c ] L1 = [ a ] L2 = [ b,c ] L1 = [a,b ] L2 = [ c ] L1 = [ a,b,c ] L2 = [ ] 8Thêm một phần tử vào list Thêm một phần tử vào đầu của list, ta cần một procedure như sau : add( X, L , [ X L ] ). ( Sự kiện)2.4 Xoá một phần tử ra khỏi list :Xoá một phần tử X ra khỏi list L, có thể được lập trình như một vị từ : del(X , L , L1 ) del( X, [ X Tail ], Tail ). del( X, [ Y Tail ] , [ Y Tail1] ) :- del( X , Tail , Tail1 ). ? - del( a, [ a,b,a,a ] , L ). L = [ b,a,a ]; L = [ a,b,a ]; L = [ a,b,a ]Ta có thể dùng vị từ del để định nghĩa thao tác thêm một phần tử vào bất kỳ chỗ nào trong một list . insert( X, List , BiggerList ) :- del( X, BiggerList, List ). 9Sublist Vị từ này có hai đối số : sublist( S , L ) Vị từ xét xem list S có phải là một list con của List L không. sublist( S, L ) :- conc(L1, L2, L), conc( S , L3 , L2 ). L L1 S L3 ...

Tài liệu được xem nhiều: