ngôn ngữ Prolog và ứng dụng lập trình Prolog

23 3.8K 19
ngôn ngữ Prolog và ứng dụng lập trình Prolog

Đ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

Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 1 LỜI NÓI ĐẦU Prolog - xuất phát từ cụm từ tiếng Pháp Programmation en logique - là "lập trình theo lô gích". Prolog xuất hiện từ năm 1972, do Alain Colmerauer và Robert Kowalski thiết kế. Mục tiêu của Prolog là giúp người dùng mô tả lại bài toán bằng ngôn ngữ của logic. Dựa trên đó, máy tính sẽ tiến hành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn (hợp nhất, quay lui và tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng. Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ nhân tạo và ngôn ngữ học trong khoa học máy tính, đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên. Cú pháp và ngữ nghĩa của Prolog đơn giản và sáng sủa. Nó được người Nhật coi là một trong những nền tảng để xây dựng máy tính thế hệ thứ năm, mà ở đó thay vì phải mô tả cách giải quyết một bài toán trên máy tính, con người chỉ cần mô tả bài toán và máy tính sẽ hỗ trợ họ nốt phần còn lại. Trong bài thu hoạch môn học Biểu diễn tri thức và suy luận này, em xin trình bày khái quát về ngôn ngữ Prolog và ứng dụng lập trình Prolog cho 3 bài toán: tháp Hà Nội, tính giai thừa, và lập gia hệ. Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 2 I. Ngôn ngữ Prolog 1. Giới thiệu Prolog là một ngôn ngữ lập trình. Tên gọi Prolog được xuất phát từ cụm từ tiếng Pháp Programmation en logique, nghĩa là "lập trình theo lô-gích". Xuất hiện từ năm 1972 (do Alain Colmerauer và Robert Kowalski thiết kế). Mục tiêu của Prolog là giúp người dùng mô tả lại bài toán trên ngôn ngữ của logic. Dựa trên đó, máy tính sẽ tiến hành suy diễn tự động dựa vào những cơ chế suy diễn có sẵn (hợp nhất, quay lui và tìm kiếm theo chiều sâu) để tìm câu trả lời cho người dùng. Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ nhân tạo và ngôn ngữ học trong khoa học máy tính (đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên vì đây là mục tiêu thiết kế ban đầu của nó). Cú pháp và ngữ nghĩa của Prolog đơn giản và sáng sủa. Nó được người Nhật coi là một trong những nền tảng để xây dựng máy tính thế hệ thứ năm: thay vì phải mô tả cách giải quyết một bài toán trên máy tính, con người chỉ cần mô tả bài toán và máy tính sẽ hỗ trợ họ phần còn lại. Nguyên lý của lập trình theo lô-gích dựa trên các mệnh đề Horn. Một mệnh đề Horn biểu diễn một sự kiện nào đó là đúng hoặc không đúng, xảy ra hay không xảy ra. Ví dụ:  Thạch là một học viên cao học.  Nếu Thạch học tốt thì sẽ được làm luận văn.  Nếu A là cha mẹ của B và B là cha mẹ của C thì A là ông bà của C. 2. Các thuật ngữ: Một chương trình Prolog là một cơ sở dữ liệu gồm các mệnh đề (clause). Mỗi mệnh đề được xây dựng từ các vị từ. Một vị từ có thể có một hoặc nhiều nguyên tử logic (logic atom). Mỗi logic atom biểu diễn quan hệ giữa các hạng (term). Term có thể sơ cấp (elementary term) như các hằng, các biến và phức hợp (compound term) Các term phức hợp biểu diễn các đối tượng phức tạp của bài toán đang xét. Term phức hợp là một hàm tử (functor) có đối số (argument), các functor này có dạng:  Tên_functor(Đối_1, Đối_2,…, Đối_n) Trong đó:  Tên_functor là một chuỗi gồm các chữ cái và chữ số và được bắt đầu bằng một chữ cái thường.  Các đối có thể là biến, term sơ cấp hoặc phức hợp. Mệnh đề có thể là một sự kiện, một luật hay một câu hỏi. Prolog quy ước sau mỗi mệnh đề cần có một dấu chấm để kết thúc. Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 3 3. Các kiểu dữ liệu: Prolog có hai dạng kiểu dữ liệu: sơ cấp và có cấu trúc.  Kiểu dữ liệu sơ cấp: gồm một số kiểu dữ liệu được định nghĩa sẵn trong Prolog như:  char: kiểu ký tự, khi sử dụng đặt trong cặp dấu nháy đơn.Ví dụ: ‘a’, ‘b’, …  string: kiểu chuỗi, khi sử dụng đặt trong cặp dấu nháy đôi. Ví dụ: “hoc vien cao hoc”  integer: kiểu số nguyên.  unsigned: kiểu số nguyên dương không dấu.  real: kiểu số thực.  Kiểu dữ liệu có cấu trúc: do người dùng tự định nghĩa dựa trên các kiểu sơ cấp đã có sẵn. Có một số trình biên dịch ngôn ngữ Prolog không yêu cầu người dùng phải khai báo kiểu dữ liệu được dùng (ví dụ như SWI-Prolog). Tuy nhiên, việc khai báo này là cần thiết đối với các hàm hay vị từ trong Visual Prolog. 4. Chú thích Tương tự như các ngôn ngữ khác, trong một chương trình Prolog, người dùng có thể thêm vào các chú thích (comment). Khi muốn chú thích cho một dòng, có thể sử dụng dấu % và sử dụng cặp dấu /* và */ khi chú thích nhiều dòng. Ví dụ:  % đây là một dòng chú thích  /* đây cũng là một dòng chú thích */  /* đây là chú thích trên nhiều dòng */ 5. Biến: Người dùng có thể sử dụng các biến trong Prolog với quy ước như sau: Tên biến được quy ước là một chuỗi gồm chữ cái và chữ số và luôn bắt đầu bằng một chữ cái hoa hoặc dấu gạch dưới _. Ví dụ:  Tên các biến sau là không hợp lệ: uoc_so, 2n, 345, …  Tên các biến sau là hợp lệ: X, Ten, _, _Phai, Uoc_so, … Trong Prolog, có một biến đặc biệt không cần chỉ định kiểu khi sử dụng, đó là dấu gạch dưới _. Dấu gạch dưới được xem như một biến, sử dụng cho một vị từ nào đó có một đối mà với bất kỳ giá trị nào của đối này cũng nhận được một giá trị duy nhất. 6. Phép toán số học: Prolog chủ yếu hỗ trợ xử lý các ký hiệu. Tuy nhiên, nó cũng hỗ trợ một số phép toán hai ngôi chuẩn như sau: Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 4 Phép toán 2 ngôi Ý nghĩa + Cộng 2 số - Trừ 2 số * Nhân 2 số / Chia hai số Mod Chia lấy phần dư Div Chia lấy phần nguyên Phép so sánh 2 ngôi Ý nghĩa > Lớn hơn >= Lớn hơn hoặc bằng < Nhỏ hơn <= Nhỏ hơn hoặc bằng <> Hoặc >< Khác := Bằng Với toán tử logic, Prolog sử dụng dấu phẩy , thay cho toán tử and (và) và dấu chấm phẩy ; thay cho or (hoặc). 7. Sự kiện và luật: Sự kiện: là một vị từ diễn tả một sự thật. Ví dụ:  “2 là một số nguyên tố” là một sự kiện vì nó diễn tả sự thật. Ta có thể diễn đạt dưới một vị từ trong Prolog như sau: nguyen_to(2). Ví dụ: Xét cây phả hệ như sau: Cây phả hệ gia đình  Trong đó, các nút tròn đại diện cho 1 người, các mũi tên biểu diễn cho mối quan hệ “là cha mẹ của”. an bình hạnh phúc phú quý tài Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 5  Sự kiện “an là cha mẹ của hạnh” sẽ được diễn đạt bằng một vị từ như sau:  cha_me(“an”, “hanh”).  Vị từ cha_me có 2 đối là “an” và “hanh”. Dưới đây là 6 vị từ diễn đạt cho cây phả hệ trên:  cha_me(“an”, “hanh”).  cha_me(“binh”, “hanh”).  cha_me(“binh”, “phuc”).  cha_me(“hanh”, “phu”).  cha_me(“hanh”, “quy”).  cha_me(“quy”, “tai”). Luật: là một vị từ diễn tả quy luật suy diễn được công nhận đúng. Luật được trình bày dưới dạng một mệnh đề. Trong Prolog, để định nghĩa cho một luật, ta sử dụng cặp ký tự :- Ví dụ:  Ta định nghĩa thêm vị từ con_cai(X, Y) với 2 đối số là X và Y, mang ý nghĩa “X là con cái của Y”.  Ta sẽ có luật như sau: con_cai(X,Y):-cha_me(Y,X), được hiểu là “X là con cái của Y nếu Y là cha mẹ của X”. Ví dụ:  Để diễn tả luật: “ai là người đều phải chết”, ta viết như sau: chet(X):-nguoi(X). Ví dụ:  Xét định nghĩa sau: “N là một số nguyên tố nếu N>0, M là số nguyên tố nào đó, M<N và N không chia hết cho M”.  Khi biểu diễn bằng Prolog, ta có thể viết như sau: nguyen_to(N):-N>0, nguyen_to(M), M<N, N mod M <> 0. Phân biệt sự kiện và luật:  Sự kiện là một điều luôn đúng và không có ràng buộc.  Luật thì phải phụ thuộc vào các biến hay thuộc tính và khi thoả mãn điều kiện nào đó thì là đúng.  Một luật thường gồm hai phần: o Phần bên trái dấu :- được gọi là kết luận hay phần đầu (head) của luật. o Phần bên phải dấu :- được gọi là điều kiện hay phần thân (body) của luật.  Nếu điều kiện đúng thì phần kết luận cũng đúng. Đó là hậu quả logic của phép suy luận (inference). 8. Chương trình Prolog: Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 6 Một chương trình Prolog thường gồm 4 phần cơ bản như sau: domains, predicates, clauses và goal. domains:  Đây là phần định nghĩa kiểu dữ liệu mới dựa vào các kiểu dữ liệu đã biết.  Các kiểu dữ liệu được định nghĩa ở đây sẽ được sử dụng cho các đối số trong các vị từ.  Nếu các vị từ sử dụng đối số có kiểu cơ bản thì có thể không cần phải định nghĩa lại các kiểu đó. Tuy nhiên, ta nên định nghĩa lại các kiểu cơ bản để chương trình sáng sủa.  Cú pháp: <danh sách kiểu mới> = <kiểu đã biết> hoặc <danh sách kiểu mới> = <danh sách kiểu đã biết> Trong đó, <kiểu đã biết> có thể là kiểu cơ bản (như số nguyên, số thực, …) hoặc các kiểu đã được định nghĩa trước. Các kiểu mới phân cách nhau bởi dấu phẩy, còn các kiểu đã biết phân cách nhau bởi dấu chấm phẩy ; Ví dụ: domains ten, tac_gia, nha_xb, dia_chi = string. nam, thang, so_luong = integer. dien_tich = real. nam_xb = nxb(thang, nam). do_vat = sach(tac_gia, ten, nha_xb, nam_xb); xe(ten, so_luong); nha(dia_chi, dien_tich). Trong ví dụ trên, ta đã định nghĩa các kiểu mới ten, tac_gia, nha_xb, dia_chi dựa vào cùng một kiểu cơ bản đã biết là string. Đồng thời, ta định nghĩa các kiểu mới nam, thang, so_luong dựa vào cùng một kiểu đã biết là integer. Kiểu mới dien_tich dựa vào kiểu đã biết là real. Kiểu mới nam_xb dựa vào kiểu nxb được xây dựng từ các kiểu đã biết là thang, nam Kiểu do_vat dựa vào các kiểu sach, xe, nha mà các kiểu này lại dựa vào các kiểu đã biết. predicates:  Đây là phần bắt buộc phải có. Trong phần này, cần phải khai báo đầy đủ các vị từ sử dụng trong phần clauses, ngoại trừ các vị từ mà trình biên dịch Prolog đã xây dựng sẵn.  Cú pháp: <Tên vị từ> (<danh sách các kiểu>) Trong đó, <danh sách các kiểu> là các kiểu cơ bản hoặc là các kiểu đã được định nghĩa trong phần domains và được viết phân cách nhau bởi dấu phẩy. Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 7 Ví dụ: predicates so_huu (ten, do_vat). nguyen_to(integer). nguoi(ten). cha_me(ten, ten). Trong ví dụ trên ta khai báo 4 vị từ. Trong đó:  Vị từ so_huu (ten, do_vat) để chỉ một người có tên là ten sẽ sở hữu môt do_vat nào đó.  Vị từ nguyen_to(integer) để xét xem một số nguyên nào đó có phải là số nguyên tố hay không.  Vị từ nguoi(ten) để xét xem một cái tên ten nào đó có là người không.  Vị từ cha_me(ten, ten) xét xem một người có tên là ten (đối thứ nhất) có là cha mẹ của người có tên là ten (đối thứ hai) hay không. clauses:  Đây là phần bắt buộc phải có, dùng để mô tả các sự kiện và các luật, sử dụng các vị từ đã khai báo trong phần predicates.  Cú pháp: <Tên vị từ>(<danh sách các tham số>) <kí hiệu> <Tên vị từ 1>(<danh sách các tham số 1>) <kí hiệu> … <Tên vị từ N>(<danh sách các tham số N>) <kí hiệu> Trong đó, Tên vị từ phải được khai báo trong phần predicates.  Các tham số có thể là các hằng hoặc biến có kiểu tương thích với các kiểu tương ứng đã được khai báo trong các vị từ ở trong phần predicates và được viết cách nhau bởi dấu phẩy.  Các kí hiệu bao gồm: :- điều kiện “nếu”. , điều kiện “và”. ; điều kiện “hoặc”. . kết thúc vị từ. Ví dụ: clauses  nguyen_to(2).  nguyen_to(N):-N>0, nguyen_to(M), M<N, N mod M <>0.  so_huu(“Tran Thi HongYen”, sach(“Do Van Nhon”, “Giao Trinh Toan Roi Rac”, “Khoa Hoc Co Ban”, nxb(9,2006))).  nguoi(“Socrates”). Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 8  chet(X):-nguoi(X). Lưu ý: Nếu trong các tham số của một vị từ có biến thì biến này phải xuất hiện ít nhất 2 lần trong vị từ đó hoặc trong các vị từ dùng để suy diễn ra vị từ đó. Nếu chỉ xuất hiện một lần thì bắt buộc phải dùng biến tự do. Ví dụ:  Để diễn tả sự kiện: Tổ hợp chập 0 của N bất kỳ bằng 1, ta không thể viết To_hop(N,0,1) vì biến N chỉ xuất hiện đúng một lần trong vị từ này, mà phải viết là To_hop(_,0,1) . goal:  Ở phần này, người dùng sẽ đưa ra các mục tiêu cần tìm kết quả, thực chất là các câu hỏi mà người dùng muốn Prolog trả lời dựa vào các sự kiện và luật đã được khai báo và định nghĩa ở trên.  Cú pháp phần goal giống như cú pháp phần clauses, nghĩa là đưa vào một hoặc một số các vị từ. Nếu tất cả các tham số của vị từ là hằng thì kết quả nhận được là true (hoặc Yes - đúng) hoặc false (hoặc No - sai). Nếu trong các tham số của vị từ có biến thì kết quả trả về sẽ là các giá trị của biến. Ví dụ:  Muốn biết 4 có phải là số nguyên tố không thì trong phần goal sẽ nhập vị từ sau: nguyen_to(4), và kết quả nhận được sẽ là false.  Nếu phần goal được nhập là nguyen_to(X), thì câu trả lời là X=2  Ngoài các phần chủ yếu nói trên, có thể đưa vào các phần liên quan đến khai báo hằng, các tập tin liên quan hoặc chỉ thị dịch. Ví dụ: Để khai báo hằng số Pi, ta viết: constants Pi = 3.141592653 Lưu ý: tùy theo trình biên dịch, thể hiện phần goal sẽ khác nhau. Một số trình biên dịch cho người dùng nhập phần goal sau dấu nhắc ?- (như B-Prolog hay SWI-Prolog). Tuy nhiên, cũng có trình biên dịch như Turbo-Prolog hay Visual Prolog thì các mục tiêu viết sau từ khóa goal. 9. Phép hợp nhất Công việc quan trọng nhất của Prolog trong việc tìm câu trả lời là thực hiện việc hợp nhất. Phép hợp nhất sẽ được biểu diễn bởi dấu =. Nó có hai thành phần: vế trái và vế phải. Phép hợp nhất sẽ trả về kết quả true (thành công) hoặc false (thất bại). Có các trường hợp hợp nhất sau: Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 9 a. Cả hai vế đều là hằng hoặc biểu thức chứa toàn hằng: nếu giá trị của hai vế là bằng nhau thì phép hợp nhất thành công (kết quả là true), ngược lại phép hợp nhất sẽ thất bại (kết quả là false). Ví dụ 15:  9 = 9  true  7 = 9  false  2 = 1 +1  false  2+1 = 1+2  true.  “xyz” = “xyz”  true  “xyzt” = “xyz”  false b. Một trong hai vế là hằng hoặc trong biểu thức chứa toàn hằng, vế kia là biến hoặc biểu thức có chứa biến. Nếu tất cả các biến đều có giá trị (các biến ở tình trạng bound) thì quay về trường hợp a.  9 = X  false nếu X đã có giá trị là 8  9 = X +1  true nếu X đã có giá trị là 8  Y = “Socrates”  true nếu Y đã có giá trị là “Socrates” Nếu có biến chưa có giá trị (biến ở tình trạng unbound), Prolog sẽ gán giá trị cho biến sao cho hai vế có giá trị như nhau và trả về kết quả là true. Nếu không tìm giá trị như vậy, phép hợp nhất sẽ cho kết quả là false.  9 = X  true nếu X chưa có giá trị, sau phép hợp nhất này, X sẽ có giá trị là 9  -1 = X*X  false vì không thể tìm cho X giá trị nào làm cho giá trị hai vế là như nhau. c. Cả hai vế đều là biến hoặc các biểu thức có chứa biến: Nếu tất cả các biến đều có chứa giá trị thì quay về trường hợp a.  X = Y  true nếu cả X và Y đều đã có giá trị và những giá trị này bằng nhau.  X - 1 = Y  false nếu X và Y đều đã có giá trị và X nhỏ hơn Y. Nếu tất cả các biến của một vế đều đã có giá trị, quay về về trường hợp c  X = Y  true nếu X chưa có giá trị và Y đã có giá trị, sau phép hợp nhất, X sẽ nhận giá trị của Y  X - 1 = Y  true nếu X chưa có giá trị, Y đã có giá trị. Sau phép hợp nhất, X sẽ có giá trị bằng Y +1 Cả hai vế đều còn chứa biến ở tình trạng unbound thì hợp nhất vẫn thành công và mỗi khi một biến nào đó trong vế phải hoặc vế trái có giá trị thì biến còn lại cũng sẽ được ràng buộc với giá trị đó.  X = Y  true nếu cả X và Y đều chưa gán giá trị.  X - 1 = Y  true nếu cả X và Y đều chưa gán giá trị. 10. Cơ chế tìm câu trả lời của Prolog: Khi nhận được một câu hỏi ở phần goal thì Prolog sẽ thực hiện công việc so khớp (match), tức là tìm mệnh đề đầu tiên đề cập đến khái niệm mà nó nhận được. Cụ thể là Prolog sẽ dùng phép hợp nhất đã trình bày ở trên trong quá trình so khớp cấu trúc dữ liệu một mục tiêu với một mệnh đề. Giả sử người dùng đặt ra câu hỏi như sau: nguoi(“Socrates”). Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 10 Prolog sẽ tìm mệnh đề đầu tiên có liên quan đến khái niệm nguoi. Và mệnh đề đầu tiên và duy nhất có liên quan đến khái niệm này là: nguoi(“Socrates”). Như vậy, khi đã có câu hỏi nguoi(“Socrates”). và tìm thấy mệnh đề liên quan nguoi(“Socrates”)., Prolog sẽ tiến hành tìm kiếm lời giải. Công việc này tiến hành bằng cách tạo mối liên kết giữa các thông số ở phần câu hỏi và các thông số ở phần mệnh đề. Sau khi đã tạo mối quan hệ giữa các thông số ở phần câu hỏi và phần mệnh đề, Prolog sẽ tiến hành các mệnh đề (nếu mệnh đề này một luật). Nếu tất cả các mệnh đề thành công và các biến ở phần câu hỏi đã ở tình trạng bound (tức là đã có giá trị), Prolog sẽ thông báo lời giải. Nếu là câu hỏi thuộc dạng true/false (Yes/No) như ví dụ trên, tức là câu hỏi không chứa biến, Prolog sẽ trả lời true (Yes) nếu công việc hợp nhất thành công và các mệnh đề đều thành công (nếu mệnh đề so khớp là một luật). Ở ví dụ trên, thông số của câu hỏi là một hằng “Socrates”, và thông số của mệnh đề tương ứng cũng là một hằng “Socrates”. Hai hằng này hợp nhất thành công, và kết quả trả lời là true(Yes). Nếu người dùng đặt ra câu hỏi khác: nguoi(“Xeda”), Prolog cũng chỉ tìm thấy một mệnh đề liên quan đến khái niệm này là nguoi(“Socrates”). Vì sự hợp nhất giữa hai hằng “Socrates” và “Xeda” thất bại nên kết quả sẽ là false(No). Giả sử câu hỏi có chứa biến: nguoi(X). Hệ thống sẽ tìm thấy mệnh đề có liên quan đến vấn đề này là nguoi(“Socrates”), rồi tiến hành hợp nhất giữa X và “Socrates”. Vì X chưa có giá trị (unbound) nên phép hợp nhất thành công. Kết quả X có giá trị là “Socrates”. Khi việc hợp nhất các thông số giữa phần câu hỏi và phần mệnh đề đã thành công, tất cả các biến cần tìm đã có giá trị (ở đây chỉ có một biến là X), thì hệ thống sẽ thông báo đã tìm ra lời giải và in ra giá trị của X ( X = “Socrates”) Xét trường hợp câu hỏi so khớp với một luật: chet(Y). Câu hỏi được so khớp với mệnh đề sau: chet(X): - nguoi (X). Vì hai biến X (đối của mệnh đề) và Y (đối của câu hỏi) đều chưa chứa giá trị, hệ thống sẽ xem cả hai biến là một, nghĩa là khi X có được giá trị thì Y cũng có giá trị đó và ngược lại. Quá trình thực hiện các mệnh đề con ở vế phải sẽ được thực hiện như sau:  Nếu mệnh đề con này có thông số là biến unbound, Prolog sẽ tìm giá trị của biến này để mệnh đề con có giá trị true(Yes). Nếu không tìm được, mệnh đề con sẽ thất bại.  Nếu mệnh đề con có đối đều là biến bound (đã có giá trị) hoặc là hằng, Prolog sẽ kiểm tra xem mệnh đề con có trả về giá trị true(Yes) hay không. Nếu không, mệnh đề con sẽ thất bại. Các mệnh đề con sẽ được tiến hành từ trái qua phải, và nếu có một mệnh đề con thất bại, mệnh đề được so khớp sẽ thất bại. Ở trường hợp trên, khi tiến hành mệnh đề nguoi(X), vì biến X là unbound (trường hợp 9.1) nên hệ thống sẽ tìm giá trị của X cho mệnh đề con trên là đúng. Cách tìm kiếm câu trả lời cho mệnh đề [...]... Thạch – CH1301052 GVHD: PGS.TS Đỗ Văn Nhơn Trang 21 Biểu diễn tri thức và suy luận Tài liệu tham khảo [1] PGS TS Đỗ Văn Nhơn, bài giảng Biểu diễn tri thức và suy luận, 2014 [2] Phan Huy Khánh, Lập trình logic trong Prolog, NXB ĐHQG Hà Nội, 2004 [3] ThS Nguyễn Văn Linh, Ngôn Ngữ Lập Trình, ĐH Cần Thơ, 12/2003 [4] http://www.visual -prolog. com/ [5] http://vi.wikipedia.org/wiki/ [6] http://voer.edu.vn/... rất có ích đối với người lập trình khi cần sử dụng nhiều phương án giải quyết vấn đề Tuy nhiên, nếu không kiểm soát tốt quá trình này, việc quay lui sẽ trở nên kém hiệu quả Vì vậy, Prolog sử dụng kỹ thuật nhát cắt để kiểm soát quay lui, hay cấm quay lui, đồng thời giúp khống chế số lời giải nhằm khắc phục khiếm khuyết này Ví dụ sau đây minh họa cho một chương trình Prolog sử dụng kỹ thuật quay lui kém... thức và suy luận Kết quả sau khi biên dịch và chạy bài toán Tháp Hà Nội 2 Bài toán tính giai thừa: Mô tả bài toán: Visual Prolog hỗ trợ chạy chương trình ở 2 chế độ (console và GUI) Ngoài ra, nó còn hỗ trợ xử lý các luồng nhập, xuất dữ liệu, tương tác người dùng Sau đây là một ví dụ về chương trình tính giai thừa của một số nguyên mà hàm tính giai thừa được định nghĩa dưới dạng một vị từ, và sử dụng. .. và suy luận đến khái niệm này là nguoi(“Xeda”) Việc hợp nhất giữa X và Xeda lại được thực hiện, X sẽ có giá trị là Xeda Sau đó, khi tiếp tục thực hiện mệnh đề con vua(X) thì mệnh đề con lần này được thực hiện thành công Prolog đã tìm ra lời giải Ta nhận thấy rằng ngoài sự hợp nhất, Prolog còn sử dụng kỹ thuật quay lui Và câu trả lời của Prolog cho câu hỏi sungsuong(X) sẽ là X= “Xeda” 12 Nhát cắt: Prolog. .. Nhơn Trang 22 Biểu diễn tri thức và suy luận Mục lục Lời nói đầu 1 I Ngôn ngữ Prolog 2 1 Giới thiệu 2 2 Các thuật ngữ 2 3 Các kiểu dữ liệu 3 4 Chú thích .3 5 Biến .3 6 Phép toán số học 3 7 Sự kiện và luật .4 8 Chương trình Prolog 5 9 Phép... người dùng trên Visual Prolog Dưới đây là giao diện khi biên dịch và chạy chương trình: Giao diện chương trình bài toán gia hệ Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS Đỗ Văn Nhơn Trang 18 Biểu diễn tri thức và suy luận Trước tiên, ta soạn thảo tập tin data.txt với nội dung như sau: Tiếp theo, nhấn nút và chọn file dữ liệu mẫu data.txt để mở: Tiếp theo, ta lần lượt click vào 3 nút trên toolbar... minh họa bằng Prolog Phần này trình bày một số chương trình minh họa viết bằng Prolog, cụ thể là sử dụng trình biên dịch Visual Prolog Khai báo các sự kiện (facts): Trong Visual Prolog, khi khai báo các vị từ, có thể cần chỉ định kiểu (mode) của vị từ Các mode này bao gồm:    single: sự kiện chỉ có một giá trị duy nhất, nếu giá trị khác được thêm vào thì sẽ ghi đè (overwrite) lên giá trị cũ Nếu một... Luật thứ hai sẽ tính N giai thừa với lời gọi đệ quy giaithua(N1,F1) và kết quả của F là N*F1, nghĩa là giá trị hiện tại của N nhân với kết quả giai thừa của N-1 (N1) Đoạn chương trình sau khi thực thi sẽ cho phép người dùng nhập vào một số nguyên và gọi tới vị từ giaithua để tính giai thừa và in ra kết quả Trong Visual Prolog, đoạn chương trình thực hiện công việc này là vị từ run() được định nghĩa như...Biểu diễn tri thức và suy luận con này hoàn toàn giống như cách hệ thống tìm câu trả lời khi đặt câu hỏi này trong phần câu hỏi Do đó, X sẽ có giá trị là “Socrates” Mặt khác, do X và Y được xem như một nên khi X có giá trị là “Socrates” thì Y cũng có giá trị này và Prolog thông báo là đã tìm ra lời giải và in ra giá trị của Y là: Y=“Socrates” 11 Sự quay lui: Trong Prolog, phép hợp nhất là chủ... liên hệ giữa hai số X và Y: 1 Nếu X < 3 thì Y = 0 2 Nếu X ≤ 3 và X < 6 thì Y = 2 3 Nếu X ≤ 6 thì Y = 4 Và định nghĩa vị từ f( X, Y ) trong Prolog như sau : f( X, 0) :- X < 3 % luật 1 f( X, 2) :- 3 =< X, X < 6 % luật 2 f( X, 4) :- 6 =< X % luật 3 Giả sử đặt ra câu hỏi: f(1,Y), 2 < Y Lúc này, Y nhận giá trị 0, đích thứ hai trở thành: 2 . bài toán và máy tính sẽ hỗ trợ họ nốt phần còn lại. Trong bài thu hoạch môn học Biểu diễn tri thức và suy luận này, em xin trình bày khái quát về ngôn ngữ Prolog và ứng dụng lập trình Prolog. thừa, và lập gia hệ. Biểu diễn tri thức và suy luận Hồ Viết Quang Thạch – CH1301052 GVHD: PGS.TS. Đỗ Văn Nhơn Trang 2 I. Ngôn ngữ Prolog 1. Giới thiệu Prolog là một ngôn ngữ lập trình. . trả lời cho người dùng. Prolog được sử dụng nhiều trong các ứng dụng của trí tuệ nhân tạo và ngôn ngữ học trong khoa học máy tính (đặc biệt là trong ngành xử lý ngôn ngữ tự nhiên vì đây là mục

Ngày đăng: 19/05/2015, 02:08

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

Tài liệu liên quan