Giáo trình Lập trình Logic trong Prolog - NXB Đại học Quốc Gia Hà Nội

Giáo trình Prolog Đại học Quốc Gia. Tài liệu lập trình logic, phù hợp cho sinh viên và người mới bắt đầu. Tìm hiểu cú pháp, ví dụ, bài tập Prolog.

Trường đại học

Đại học Quốc gia Hà Nội

Chuyên ngành

Tin học

Người đăng

Ẩn danh

Thể loại

Giáo trình

2004

99
3
0

Phí lưu trữ

35 Point

Mục lục chi tiết

LỜI NÓI ĐẦU

1. CHƯƠNG 1: MỞ ĐẦU VỀ NGÔN NGỮ PROLOG

1.1. GIỚI THIỆU NGÔN NGỮ PROLOG

1.2. Prolog là ngôn ngữ lập trình lôgich

1.3. Các kiểu dữ liệu Prolog

1.4. Chú thích

1.5. CÁC KIỂU DỮ LIỆU SƠ CẤP CỦA PROLOG

1.6. Kiểu hằng số

1.7. Kiểu hằng lôgich

1.8. Kiểu hằng chuỗi ký tự

1.9. Kiểu hằng nguyên tử

1.10. SỰ KIỆN VÀ LUẬT TRONG PROLOG

1.11. Xây dựng sự kiện

1.12. Xây dựng luật

1.13. Định nghĩa luật

1.14. Định nghĩa luật đệ quy

1.15. Sử dụng biến trong Prolog

1.16. KIỂU DỮ LIỆU CẤU TRÚC CỦA PROLOG

1.17. Định nghĩa kiểu cấu trúc của Prolog

1.18. So sánh và hợp nhất các hạng

3. CHƯƠNG 3: NGỮ NGHĨA CỦA CHƯƠNG TRÌNH PROLOG

3.1. QUAN HỆ GIỮA PROLOG VÀ LÔGICH TOÁN HỌC

3.2. CÁC MỨC NGHĨA CỦA CHƯƠNG TRÌNH PROLOG

3.3. Nghĩa khai báo của chương trình Prolog

3.4. Khái niệm về gói mệnh đề

3.5. Nghĩa lôgich của các mệnh đề

3.6. Nghĩa thủ tục của Prolog

3.7. Tổ hợp các yếu tố khai báo và thủ tục

3.8. VÍ DỤ : CON KHỈ VÀ QUẢ CHUỐI

3.9. Phát biểu bài toán

3.10. Giải bài toán với Prolog

3.11. Sắp đặt thứ tự các mệnh đề và các đích

3.12. Nguy cơ gặp các vòng lặp vô hạn

3.13. Thay đổi thứ tự mệnh đề và đích trong chương trình

3. CHƯƠNG 3: CÁC PHÉP TOÁN VÀ SỐ HỌC

3.1. Các phép toán số học

3.2. Biểu thức số học

3.3. Định nghĩa các phép toán trong Prolog

3.4. CÁC PHÉP SO SÁNH CỦA PROLOG

3.5. Các phép so sánh số học

3.6. Các phép so sánh hạng

3.7. Vị từ xác định kiểu

3.8. Một số vị từ xử lý hạng

3.9. ĐỊNH NGHĨA HÀM

3.10. Định nghĩa hàm sử dụng đệ quy

3.11. Tối ưu phép đệ quy

3.12. Một số ví dụ khác về đệ quy

3.13. Tìm đường đi trong một đồ thị có định hướng

3.14. Tính độ dài đường đi trong một đồ thị

3.15. Tính gần đúng các chuỗi

4. CHƯƠNG 4: CẤU TRÚC DANH SÁCH

4.1. BIỂU DIỄN CẤU TRÚC DANH SÁCH

4.2. MỘT SỐ VỊ TỪ XỬ LÝ DANH SÁCH CỦA PROLOG

4.3. CÁC THAO TÁC CƠ BẢN TRÊN DANH SÁCH

4.4. Xây dựng lại một số vị từ có sẵn

4.5. Kiểm tra một phần tử có mặt trong danh sách

4.6. Ghép hai danh sách

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

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

4.9. Nghịch đảo danh sách

4.10. Danh sách con

4.11. Một số ví dụ về danh sách

4.12. Sắp xếp các phần tử của danh sách

4.13. Tính độ dài của một danh sách

4.14. Tạo sinh các số tự nhiên

5. CHƯƠNG 5: KỸ THUẬT LẬP TRÌNH PROLOG

5.1. Khái niệm nhát cắt

5.2. Kỹ thuật sử dụng nhát cắt

5.3. Tạo đích giả bằng nhát cắt

5.4. Dùng nhát cắt loại bỏ hoàn toàn quay lui

5.5. Ví dụ sử dụng kỹ thuật nhát cắt

5.6. Phép phủ định

5.7. Phủ định bởi thất bại

5.8. Sử dụng kỹ thuật nhát cắt và phủ định

5.9. SỬ DỤNG CÁC CẤU TRÚC

5.10. Truy cập thông tin cấu trúc từ một cơ sở dữ liệu

5.11. Trừu tượng hoá dữ liệu

5.12. Mô phỏng ôtômat hữu hạn

5.13. Mô phỏng ôtômat hữu hạn không đơn định

5.14. Mô phỏng ôtômat hữu hạn đơn định

5.15. Ví dụ : lập kế hoạch đi du lịch bằng máy bay

5.16. Bài toán tám quân hậu

5.17. Sử dụng danh sách toạ độ theo hàng và cột

5.18. Sử dụng danh sách toạ độ theo cột

5.19. Sử dụng toạ độ theo hàng, cột và các đường CHÉO

5.20. Bộ diễn dịch Prolog

5.21. QUÁ TRÌNH VÀO-RA VÀ LÀM VIỆC VỚI TỆP

5.22. Làm việc với các tệp

5.23. Đọc và ghi lên tệp

5.24. Một số ví dụ đọc và ghi lên tệp

5.25. Nạp chương trình Prolog vào bộ nhớ

5.26. Ứng dụng chế độ làm việc với các tệp

5.27. Định dạng các hạng

5.28. Sử dụng tệp xử lý các hạng

5.29. Thao tác trên các ký tự

5.30. Thao tác trên các nguyên tử

5.31. Một số vị từ xử lý cơ sở dữ liệu

PHỤ LỤC A: MỘT SỐ CHƯƠNG TRÌNH PROLOG

PHỤ LỤC B: HƯỚNG DẪN SỬ DỤNG SWI-PROLOG

B.1. GIỚI THIÊUU SWI-PROLOG

B.2. LAIM VIÊUC VỚI SWI-PROLOG

B.3. Đặt câu hỏi

B.4. Chạy trình demo

B.5. Chạy trình demo XPCE

B.6. Soạn thảo chương trình

B.7. MỘT SỐ LỆNH SWI-PROLOG THÔNG DỤNG

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Khám phá Giáo trình Lập trình Logic Prolog từ Đại học Quốc Gia Hướng dẫn toàn diện

Trong bối cảnh phát triển mạnh mẽ của ngành công nghệ thông tin, việc nắm vững các ngôn ngữ lập trình logic đóng vai trò thiết yếu, đặc biệt trong lĩnh vực trí tuệ nhân tạo. Giáo trình lập trình logic Prolog | Đại học Quốc Gia, do PGS. Phan Huy Khánh biên soạn và được Nhà Xuất bản Đại học Quốc gia Hà Nội phát hành năm 2004, là một tài liệu học tập quan trọng. Cuốn sách cung cấp cơ sở lý thuyết vững chắc và các kỹ thuật lập trình cơ bản trong Prolog, một ngôn ngữ lập trình nổi bật. Mục tiêu của giáo trình là trang bị cho sinh viên các ngành tin học và những người quan tâm đến kỹ thuật lập trình ứng dụng trong lĩnh vực trí tuệ nhân tạo những kiến thức cần thiết để giải quyết các bài toán phức tạp.

Prolog (PROgramming in LOGic) được giới thiệu lần đầu tiên vào năm 1972 bởi GS. Colmerauer tại Đại học Marseille, Pháp. Đến những năm 1980, Prolog nhanh chóng trở nên phổ biến, được Nhật Bản lựa chọn làm ngôn ngữ chủ đạo cho dự án phát triển máy tính thế hệ 5. Khác với các ngôn ngữ lập trình mệnh lệnh truyền thống, Prolog hoạt động dựa trên nguyên lý suy diễn logic, giải quyết các bài toán liên quan đến đối tượng và mối quan hệ giữa chúng. Điều này biến Prolog thành công cụ lý tưởng cho các ứng dụng như công nghệ xử lý tri thức, hệ chuyên gia, máy học và xử lý ngôn ngữ tự nhiên. Việc nghiên cứu sâu về Prolog mở ra cánh cửa hiểu biết về một logic programming paradigm độc đáo, giúp người học phát triển tư duy logic và khả năng giải quyết vấn đề một cách hệ thống. Giáo trình của Đại học Quốc Gia này không chỉ là một tài liệu học Prolog mà còn là kim chỉ nam cho việc áp dụng lập trình logic vào thực tiễn.

1.1. Prolog là gì Giới thiệu ngôn ngữ lập trình logic và lịch sử phát triển

Prolog là gì? Prolog là từ viết tắt của PROgramming in LOGic, được coi là ngôn ngữ lập trình lôgich phổ biến nhất. GS. Colmerauer và nhóm nghiên cứu của ông tại Đại học Marseille đã đề xuất Prolog vào đầu những năm 1970. Sự độc đáo của ngôn ngữ Prolog nằm ở việc nó không yêu cầu người lập trình mô tả cách thức giải quyết bài toán, mà tập trung vào việc mô tả bài toán và các quy tắc logic. Điều này giúp Prolog trở thành một ngôn ngữ declarative programming mạnh mẽ. Đến những năm 1980, nó đã được áp dụng rộng rãi, thậm chí được Nhật Bản lựa chọn làm ngôn ngữ phát triển máy tính thế hệ 5. Prolog có mặt trên nhiều nền tảng như Unix/Linux, Macintosh và Windows. Cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia tập trung vào việc làm rõ những đặc tính này, giúp sinh viên hiểu sâu về bản chất và tiềm năng của ngôn ngữ này trong việc giải quyết các vấn đề phức tạp, đặc biệt là trong lập trình trí tuệ nhân tạo.

1.2. Giáo trình Đại học Quốc Gia Nền tảng lý thuyết và mục tiêu học tập

Giáo trình lập trình logic Prolog | Đại học Quốc Gia của PGS. Phan Huy Khánh được thiết kế nhằm cung cấp nền tảng vững chắc về lập trình logic cho sinh viên. Mục tiêu chính của tài liệu là trang bị cho người học cơ sở lý thuyết và những phương pháp lập trình cơ bản nhất của môn học này. Sách hướng đến việc làm quen với các kỹ thuật lập trình logic được ứng dụng phổ biến, chủ yếu trong lĩnh vực trí tuệ nhân tạo. Các chương trong sách trình bày từ ngôn ngữ Prolog dựa trên lôgich Horn, các kiểu dữ liệu, khái niệm luật, sự kiện, đến các kỹ thuật nâng cao. Điều này giúp sinh viên các ngành tin học và những ai muốn tìm hiểu về lập trình trí tuệ nhân tạo có một tài liệu học tập toàn diện. Cuốn sách còn chứa nhiều ví dụ minh họa, giúp người đọc dễ dàng tiếp cận và áp dụng kiến thức vào thực tiễn, làm cho nó trở thành một giáo trình đại học không thể thiếu.

II. Tại sao Prolog là gì lại thách thức tư duy lập trình viên hiện đại

Việc chuyển đổi từ lối tư duy logic mệnh lệnh sang tư duy khai báo của Prolog thường là thách thức lớn đối với nhiều lập trình viên. Các ngôn ngữ truyền thống như C++, Java hay Python đòi hỏi phải mô tả tuần tự các bước để máy tính thực hiện, trong khi ngôn ngữ Prolog tập trung vào việc mô tả mối quan hệ và sự kiện, để hệ thống tự suy luận logic ra kết quả. Giáo trình lập trình logic Prolog | Đại học Quốc Gia nhận diện vấn đề này và trình bày cặn kẽ các mức nghĩa khác nhau của một chương trình Prolog: nghĩa lôgich, nghĩa khai báo, và nghĩa thủ tục, giúp người đọc vượt qua rào cản ban đầu. Sự khác biệt này đòi hỏi một cách tiếp cận hoàn toàn mới trong việc phân tích và giải quyết bài toán.

Một thách thức khác là việc hiểu rõ cơ chế nội tại của Prolog, như unification (hợp nhất) và backtracking (quay lui). Đây là những nguyên tắc lập trình logic cốt lõi, quyết định cách Prolog tìm kiếm lời giải. Nếu không nắm vững, lập trình viên có thể gặp khó khăn trong việc dự đoán hành vi của chương trình hoặc tối ưu hóa hiệu suất. Cuốn sách còn đề cập đến nguy cơ gặp các vòng lặp vô hạn nếu thứ tự mệnh đề và đích không được sắp xếp hợp lý, một vấn đề thường gặp khi làm việc với suy luận logic đệ quy. Việc vượt qua những thách thức này không chỉ giúp thành thạo Prolog mà còn rèn luyện khả năng tư duy logic ở một cấp độ cao hơn, rất có lợi cho các ngành công nghệ thông tin chuyên sâu như lập trình trí tuệ nhân tạo và phát triển hệ chuyên gia.

2.1. Vấn đề Tư duy Logic và Mô hình Lập trình khai báo

Mô hình declarative programming của Prolog khác biệt cơ bản với mô hình imperative truyền thống. Trong Prolog, người lập trình tập trung vào việc định nghĩa 'cái gì' (what) thay vì 'làm thế nào' (how). Cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia nhấn mạnh rằng Prolog dựa trên phép suy diễn lôgích và các khái niệm toán học như phép hợp nhất Herbrand, hợp giải Robinson, lôgich Horn, và lôgich vị từ bậc một. Việc này đòi hỏi một sự chuyển đổi trong tư duy logic, từ việc viết các bước thực thi sang việc định nghĩa các fact và rule (sự kiện và luật) cùng mối quan hệ giữa chúng. Hiểu được logic programming paradigm này là chìa khóa để khai thác sức mạnh của Prolog, đặc biệt trong các ứng dụng cần kiến thức biểu diễn và suy luận tự động, một yếu tố quan trọng trong lập trình trí tuệ nhân tạo.

2.2. Hiểu rõ suy luận logic và cơ chế giải quyết bài toán của Prolog

Cơ chế giải quyết bài toán của Prolog dựa trên suy luận logic thông qua việc chứng minh các đích (goals). Khi người dùng đặt một query Prolog, hệ thống sẽ tìm cách chứng minh câu hỏi đó là đúng dựa trên các sự kiện và luật đã được định nghĩa. Quá trình này được gọi là chiến lược hợp giải SLD (Selected, Linear, Definite), sử dụng phương pháp suy diễn quay lui (back-chaining). Giáo trình lập trình logic Prolog | Đại học Quốc Gia giải thích chi tiết cách Prolog lần lượt thực hiện từng đích, sử dụng unification để so khớp các mệnh đề và biến. Khi một đích không thể được thỏa mãn, Prolog sẽ tự động quay lui (backtracking) để tìm kiếm các con đường suy luận khác. Việc hiểu sâu cơ chế backtrackingunification là vô cùng quan trọng để tối ưu hóa chương trình và tránh các vòng lặp vô hạn, đảm bảo các nguyên tắc lập trình logic được áp dụng một cách hiệu quả.

III. Nắm vững Nguyên tắc Lập trình Logic và Cú pháp Prolog cơ bản

Việc học Prolog bắt đầu từ việc làm quen với các nguyên tắc lập trình logic cơ bản và cú pháp Prolog đặc trưng. Cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia hướng dẫn chi tiết cách xây dựng các thành phần cốt lõi của một chương trình Prolog: Facts (sự kiện), Rules (luật) và Queries (câu hỏi). Sự kiện là những thông tin đúng một cách vô điều kiện, trong khi luật định nghĩa các mối quan hệ có điều kiện. Người dùng tương tác với chương trình bằng cách đặt các query Prolog để truy vấn trên cơ sở dữ liệu tri thức đã xây dựng.

Ngoài ra, việc hiểu về các kiểu dữ liệu Prolog là rất quan trọng. Prolog hỗ trợ các kiểu dữ liệu sơ cấp như hằng số (số nguyên, số thực, hằng logic, hằng chuỗi ký tự, nguyên tử) và biến, cũng như các kiểu dữ liệu cấu trúc phức tạp. Trong số đó, cấu trúc dữ liệu Prolog đặc biệt là list trong Prolog đóng vai trò thiết yếu trong việc biểu diễn và xử lý các tập hợp dữ liệu. Các phép toán số học và so sánh cũng được giới thiệu, cho phép thực hiện các tính toán cơ bản. Nắm vững những yếu tố này là nền tảng vững chắc để tiếp tục khám phá các kỹ thuật lập trình logic nâng cao. Việc thực hành thường xuyên với các ví dụ trong giáo trình lập trình logic Prolog | Đại học Quốc Gia giúp người học củng cố kiến thức và phát triển khả năng tư duy logic cần thiết để giải quyết các bài toán trong lập trình trí tuệ nhân tạo.

3.1. Cú pháp Prolog Học Facts Rules và cách viết Query hiệu quả

Cú pháp Prolog tương đối đơn giản nhưng mạnh mẽ, dựa trên việc khai báo các sự kiện (facts) và luật (rules). Một fact là một mệnh đề luôn đúng, ví dụ: parent(tom, bill). thể hiện Tom là cha mẹ của Bill. Một rule định nghĩa một mối quan hệ có điều kiện, ví dụ: grandparent(X, Z) :- parent(X, Y), parent(Y, Z). nghĩa là X là ông bà của Z nếu tồn tại Y mà X là cha mẹ của Y và Y là cha mẹ của Z. Người dùng đặt query Prolog để truy vấn thông tin, ví dụ: ?- parent(X, liz). để tìm ai là cha mẹ của Liz. Giáo trình lập trình logic Prolog | Đại học Quốc Gia giải thích rõ ràng cách sử dụng biến, nguyên tử và hằng số trong các fact và rule, cũng như cách hệ thống tìm kiếm và trả lời các câu hỏi. Việc nắm vững cú pháp Prolog này là bước đầu tiên để thành thạo ngôn ngữ Prolog và áp dụng các nguyên tắc lập trình logic.

3.2. Cơ chế Unification và Backtracking Nền tảng của suy diễn

Hai cơ chế cốt lõi làm nên sức mạnh của Prologunification (hợp nhất) và backtracking (quay lui). Unification là quá trình so khớp và ràng buộc các biến để làm cho hai hạng (term) trở nên giống hệt nhau. Khi Prolog cố gắng thỏa mãn một đích, nó sẽ tìm kiếm các mệnh đề có thể hợp nhất với đích đó. Nếu có nhiều lựa chọn, Prolog sẽ thử từng lựa chọn một theo thứ tự xuất hiện. Nếu một lựa chọn dẫn đến thất bại (không thể thỏa mãn đích), hệ thống sẽ tự động quay lui (backtracking) để hủy bỏ các ràng buộc biến đã tạo và thử lựa chọn tiếp theo. Cơ chế backtracking cho phép Prolog khám phá tất cả các lời giải tiềm năng một cách tự động. Giáo trình lập trình logic Prolog | Đại học Quốc Gia minh họa chi tiết quá trình này, ví dụ như trong bài toán quan hệ gia đình, giúp người học hiểu sâu về cách Prolog thực hiện suy luận logic và tìm kiếm lời giải.

3.3. Các kiểu dữ liệu Prolog và cấu trúc danh sách List

Prolog hỗ trợ đa dạng các kiểu dữ liệu Prolog, từ các kiểu sơ cấp đến cấu trúc phức tạp. Các kiểu sơ cấp bao gồm hằng số (số nguyên, số thực, nguyên tử như tom, bill), hằng logic (true, fail), hằng chuỗi ký tự ("Hello"), và biến (bắt đầu bằng chữ in hoa hoặc dấu gạch dưới như X, Y). Đặc biệt, Prolog không yêu cầu khai báo kiểu dữ liệu tường minh, mà nhận biết kiểu qua cú pháp. Cấu trúc dữ liệu Prolog quan trọng nhất là các hạng phức hợp (compound terms), được biểu diễn dưới dạng hàm tử có đối số, ví dụ date(Day, september, 1952). Trong số các cấu trúc phức hợp, list trong Prolog là một công cụ mạnh mẽ để xử lý các tập hợp dữ liệu, tương tự như mảng trong các ngôn ngữ khác, nhưng linh hoạt hơn nhiều. Giáo trình lập trình logic Prolog | Đại học Quốc Gia dành một chương riêng để trình bày cách biểu diễn và các phép xử lý cơ bản trên danh sách, giúp sinh viên làm chủ việc quản lý dữ liệu hiệu quả.

IV. Cách ứng dụng Kỹ thuật Lập trình Prolog nâng cao Đệ quy và Nhát cắt

Để khai thác tối đa sức mạnh của ngôn ngữ Prolog, việc nắm vững các kỹ thuật lập trình Prolog nâng cao là điều cần thiết. Giáo trình lập trình logic Prolog | Đại học Quốc Gia dành chương 5 để trình bày chi tiết về phép đệ quy trong Prolog, một khả năng mạnh mẽ cho phép giải quyết các bài toán phức tạp một cách thanh lịch. Đệ quy là kỹ thuật mà một hàm hoặc quy tắc tự gọi chính nó, giúp định nghĩa các mối quan hệ dựa trên chính mối quan hệ đó ở các trường hợp đơn giản hơn. Điều này đặc biệt hữu ích khi xử lý các cấu trúc dữ liệu đệ quy như danh sách hoặc cây, và các mối quan hệ có tính chất bắc cầu như 'tổ tiên' hay 'đường đi'.

Bên cạnh đệ quy, kỹ thuật 'nhát cắt' (!) và phép phủ định (not) là những công cụ quan trọng để kiểm soát luồng suy diễn và tối ưu hóa hiệu suất chương trình. Nhát cắt cho phép người lập trình loại bỏ các nhánh suy luận không cần thiết, ngăn chặn backtracking và giảm thiểu thời gian tìm kiếm lời giải. Phủ định bởi thất bại cung cấp một cách để biểu diễn các điều kiện 'không phải', mở rộng khả năng suy luận logic của Prolog. Cuốn sách cũng hướng dẫn cách sử dụng các cấu trúc để truy cập và trừu tượng hóa thông tin từ cơ sở dữ liệu, mô phỏng các automata hữu hạn, và làm việc với các tệp để xử lý dữ liệu vào/ra (I/O). Nắm vững những kỹ thuật lập trình Prolog này giúp sinh viên phát triển các ứng dụng mạnh mẽ hơn trong lập trình trí tuệ nhân tạo và xây dựng hệ chuyên gia hiệu quả, vượt xa các chương trình Prolog đơn giản.

4.1. Cách dùng Đệ quy trong Prolog Giải quyết bài toán phức tạp

Đệ quy trong Prolog là một trong những kỹ thuật mạnh mẽ và linh hoạt nhất, cho phép định nghĩa các quan hệ dựa trên chính nó. Giáo trình lập trình logic Prolog | Đại học Quốc Gia minh họa rõ cách sử dụng đệ quy để giải quyết các bài toán có tính chất lặp hoặc phân nhánh, như tìm tổ tiên của một người trong cây gia hệ, hoặc xử lý các phần tử trong list trong Prolog. Một định nghĩa đệ quy thường bao gồm một trường hợp cơ sở (base case) để chấm dứt quá trình đệ quy và một trường hợp đệ quy (recursive case) để gọi lại chính nó với các đối số đã thay đổi. Ví dụ, quan hệ ancestor(X,Z) có thể được định nghĩa đệ quy: ancestor(X,Z) :- parent(X,Z). (trường hợp cơ sở) và ancestor(X,Z) :- parent(X,Y), ancestor(Y,Z). (trường hợp đệ quy). Kỹ thuật này giúp viết các chương trình ngắn gọn, dễ hiểu và mạnh mẽ cho nhiều loại bài toán phức tạp trong lập trình trí tuệ nhân tạo.

4.2. Kỹ thuật Nhát cắt và Phủ định Tối ưu hóa hiệu suất chương trình

Kỹ thuật Nhát cắt (!) là một công cụ đặc biệt trong Prolog dùng để kiểm soát quá trình backtracking và tối ưu hóa hiệu suất chương trình. Khi Prolog gặp một dấu nhát cắt, nó sẽ cam kết với tất cả các lựa chọn đã đưa ra trước đó và không quay lui qua điểm nhát cắt đó nữa. Điều này có thể giúp giảm đáng kể không gian tìm kiếm và tăng tốc độ thực thi, đặc biệt trong các tình huống mà chỉ cần một lời giải hoặc muốn ngăn chặn các lựa chọn không mong muốn. Phủ định bởi thất bại (not(Goal)) là một cơ chế khác, trong đó not(Goal) thành công nếu Goal thất bại và ngược lại. Điều này cho phép biểu diễn các điều kiện phủ định, mở rộng khả năng kiến thức biểu diễn của Prolog. Giáo trình lập trình logic Prolog | Đại học Quốc Gia cung cấp các ví dụ cụ thể về cách sử dụng nhát cắt và phủ định để giải quyết các bài toán như bài toán tám quân hậu hoặc các hệ thống suy luận phức tạp, đồng thời lưu ý những trường hợp cần thận trọng khi áp dụng các kỹ thuật này.

4.3. Xử lý tệp I O và cơ sở dữ liệu nội tại trong Prolog

Trong các ứng dụng thực tế, Prolog không chỉ cần xử lý các sự kiện và luật nội tại mà còn cần tương tác với dữ liệu bên ngoài. Giáo trình lập trình logic Prolog | Đại học Quốc Gia đề cập đến các kỹ thuật xử lý tệp (I/O), cho phép chương trình Prolog đọc và ghi dữ liệu từ/vào các tệp vật lý. Điều này bao gồm các vị từ (predicates) để mở, đóng, đọc và ghi trên tệp, cũng như nạp các chương trình Prolog từ tệp vào bộ nhớ. Khả năng làm việc với tệp giúp mở rộng phạm vi ứng dụng Prolog ra ngoài các ví dụ đơn giản, cho phép nó xử lý các tập dữ liệu lớn hơn hoặc tương tác với các hệ thống khác. Ngoài ra, sách còn giới thiệu các vị từ xử lý cơ sở dữ liệu nội tại của Prolog, cho phép thêm, xóa hoặc truy cập các mệnh đề (facts và rules) một cách động trong quá trình chạy chương trình. Những kỹ thuật này là cần thiết để xây dựng các hệ chuyên gia linh hoạt và các ứng dụng lập trình trí tuệ nhân tạo đòi hỏi tính tương tác cao.

V. Ứng dụng đột phá của Prolog trong Trí tuệ Nhân tạo và Hệ Chuyên gia

Prolog đã được chứng minh là một ngôn ngữ Prolog mạnh mẽ và linh hoạt trong lĩnh vực trí tuệ nhân tạo (AI) kể từ khi ra đời. Cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia nhấn mạnh các ứng dụng Prolog chủ yếu trong AI như công nghệ xử lý tri thức, hệ chuyên gia, máy học và xử lý ngôn ngữ tự nhiên. Khả năng suy luận logic mạnh mẽ của Prolog làm cho nó trở thành công cụ lý tưởng để xây dựng các hệ thống có khả năng đưa ra quyết định dựa trên một tập hợp các quy tắc và sự kiện. Điều này đặc biệt quan trọng trong các ngành công nghệ thông tin đang phát triển các giải pháp AI phức tạp.

Việc xây dựng hệ chuyên gia là một trong những ứng dụng nổi bật nhất của Prolog. Hệ chuyên gia mô phỏng quá trình ra quyết định của các chuyên gia con người trong một lĩnh vực cụ thể, sử dụng kiến thức biểu diễn dưới dạng fact và rule. Prolog cung cấp một framework tự nhiên cho việc này, cho phép lập trình viên định nghĩa các quy tắc suy luận một cách rõ ràng và dễ dàng. Bên cạnh đó, Prolog cũng góp phần vào xử lý ngôn ngữ tự nhiên (NLP) bằng cách biểu diễn ngữ pháp và ngữ nghĩa của ngôn ngữ con người dưới dạng logic. Khả năng declarative programming của nó giúp đơn giản hóa việc phát triển các bộ phận phân tích và sinh ngôn ngữ. Các ví dụ minh họa trong giáo trình lập trình logic Prolog | Đại học Quốc Gia giúp người học hiểu rõ cách biến lý thuyết thành các giải pháp thực tiễn, mở ra nhiều cơ hội trong lập trình trí tuệ nhân tạo.

5.1. Xây dựng Hệ chuyên gia và Hệ thống kiến thức biểu diễn với Prolog

Một trong những ứng dụng Prolog tiêu biểu nhất là xây dựng hệ chuyên gia. Hệ chuyên gia là các chương trình máy tính mô phỏng khả năng ra quyết định của con người trong một lĩnh vực hẹp, sử dụng một cơ sở tri thức và một bộ máy suy luận. Prolog rất phù hợp cho việc này vì nó cung cấp một cách tự nhiên để kiến thức biểu diễn dưới dạng các fact và rule. Các sự kiện mô tả thông tin cơ bản, trong khi các luật mô tả mối quan hệ và quy tắc suy luận. Ví dụ, một hệ chuyên gia y tế có thể có các luật như: bệnh(X, cúm) :- triệu_chứng(X, sốt), triệu_chứng(X, ho), triệu_chứng(X, mệt_mỏi). Prolog tự động xử lý quá trình suy luận logic để tìm ra kết luận dựa trên các thông tin đầu vào. Giáo trình lập trình logic Prolog | Đại học Quốc Gia cung cấp các ví dụ thực tế về cách thiết kế và triển khai các hệ chuyên gia đơn giản, giúp sinh viên hiểu rõ vai trò của Prolog trong lĩnh vực này của lập trình trí tuệ nhân tạo.

5.2. Lập trình trí tuệ nhân tạo Vai trò của Prolog trong máy học và xử lý ngôn ngữ

Prolog đóng vai trò quan trọng trong lập trình trí tuệ nhân tạo không chỉ ở hệ chuyên gia mà còn trong các lĩnh vực như máy học và xử lý ngôn ngữ tự nhiên (NLP). Khả năng biểu diễn tri thức và suy luận logic của ngôn ngữ Prolog cho phép xây dựng các hệ thống có thể học từ dữ liệu và đưa ra các dự đoán. Trong NLP, Prolog được sử dụng để phân tích cú pháp và ngữ nghĩa của các câu, ví dụ như xây dựng các hệ thống phân tích ngữ pháp dựa trên các luật ngữ pháp hình thức. Mặc dù các phương pháp thống kê và học sâu hiện đại đang chiếm ưu thế, Prolog vẫn là một công cụ có giá trị để nghiên cứu các mô hình AI dựa trên logic và biểu tượng, đặc biệt trong các khóa học Prolog chuyên sâu về logic và AI. Cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia giới thiệu những nguyên tắc cơ bản này, tạo nền tảng cho việc khám phá các ứng dụng Prolog tiên tiến hơn trong AI.

5.3. Tiềm năng của ngôn ngữ Prolog trong các ngành công nghệ thông tin

Mặc dù không phải là ngôn ngữ phổ biến nhất trong phát triển phần mềm thương mại hiện nay, tiềm năng của ngôn ngữ Prolog trong các ngành công nghệ thông tin chuyên biệt vẫn rất lớn. Khả năng declarative programmingsuy luận logic của nó rất phù hợp cho các bài toán cần giải quyết các vấn đề phức tạp, đòi hỏi kiến thức biểu diễn rõ ràng và khả năng tìm kiếm lời giải tự động. Ngoài lập trình trí tuệ nhân tạohệ chuyên gia, Prolog còn được ứng dụng trong các lĩnh vực như kiểm thử phần mềm tự động, quản lý cơ sở dữ liệu logic, và thậm chí là trong một số hệ thống điều khiển công nghiệp. Đối với sinh viên tại các trường như Đại học Khoa học Tự nhiên hay Đại học Công nghệ thuộc Đại học Quốc Gia, việc học Prolog không chỉ trang bị một kỹ năng lập trình độc đáo mà còn rèn luyện tư duy logic sâu sắc, giúp họ tiếp cận và giải quyết các vấn đề theo một cách khác biệt, có giá trị trong nghiên cứu và phát triển công nghệ cao.

VI. Hướng dẫn chọn Tài liệu học Prolog và vai trò trong giáo dục Đại học

Việc lựa chọn tài liệu học Prolog phù hợp là bước quan trọng để nắm vững ngôn ngữ Prolog. Giáo trình lập trình logic Prolog | Đại học Quốc Gia của PGS. Phan Huy Khánh là một lựa chọn đáng tin cậy, đặc biệt cho sinh viên Việt Nam, nhờ cách trình bày dễ hiểu và các ví dụ phù hợp. Ngoài ra, còn có nhiều khóa học Prolog trực tuyến và sách Prolog khác có thể bổ sung kiến thức. Đối với sinh viên tại các cơ sở đào tạo như Đại học Khoa học Tự nhiên, Đại học Công nghệ hay các ngành công nghệ thông tin khác thuộc Đại học Quốc Gia, việc tiếp cận một giáo trình đại học chuyên sâu như thế này là rất có lợi. Nó giúp họ không chỉ học được cú pháp mà còn hiểu sâu sắc về logic programming paradigm và các nguyên tắc lập trình logic.

Prolog vẫn giữ một vị trí nhất định trong chương trình giảng dạy của nhiều trường đại học Quốc Gia và các trường công nghệ hàng đầu, thường là một phần của môn học lập trình logic hoặc các môn liên quan đến lập trình trí tuệ nhân tạo. Việc học Prolog giúp sinh viên phát triển tư duy logic và khả năng giải quyết vấn đề một cách khai báo, một kỹ năng quý giá cho sự nghiệp nghiên cứu và phát triển AI. Hơn nữa, việc thực hành với các môi trường như SWI-Prolog hoặc GNU Prolog là cần thiết để áp dụng lý thuyết vào thực tế. Phần phụ lục của giáo trình lập trình logic Prolog | Đại học Quốc Gia cũng cung cấp hướng dẫn chi tiết về cách cài đặt và sử dụng SWI-Prolog, làm cho quá trình học tập trở nên thuận tiện hơn. Sự kết hợp giữa lý thuyết và thực hành từ các tài liệu học tập uy tín giúp sinh viên trang bị hành trang vững chắc để làm việc với các hệ thống AI phức tạp.

6.1. Hướng dẫn chọn tài liệu học Prolog và khóa học phù hợp

Để bắt đầu hành trình với ngôn ngữ Prolog, việc chọn tài liệu học Prolog phù hợp là yếu tố then chốt. Ngoài giáo trình lập trình logic Prolog | Đại học Quốc Gia của PGS. Phan Huy Khánh, sinh viên có thể tham khảo các sách Prolog kinh điển như 'Programming in Prolog' của Clocksin & Mellish hoặc 'The Art of Prolog' của Sterling & Shapiro. Đối với những người thích học qua thực hành, các khóa học Prolog trực tuyến trên các nền tảng giáo dục mở cung cấp nhiều bài tập và dự án ứng dụng. Khi lựa chọn, cần ưu tiên các tài liệu học tập có ví dụ minh họa rõ ràng, giải thích sâu sắc về cú pháp Prolog, nguyên tắc lập trình logic, và các cơ chế như unificationbacktracking. Một bài giảng Prolog chất lượng cũng sẽ tích hợp các bài tập thực hành để củng cố kiến thức, giúp người học phát triển khả năng tư duy logic và kỹ năng lập trình trí tuệ nhân tạo.

6.2. Vị thế của Prolog tại Đại học Quốc Gia và các trường công nghệ

Tại Đại học Quốc Gia và các trường công nghệ hàng đầu như Đại học Khoa học Tự nhiên hay Đại học Công nghệ, Prolog vẫn được duy trì như một môn học lập trình logic quan trọng. Mặc dù không phải là ngôn ngữ chủ đạo trong mọi khóa học, Prolog thường được giảng dạy trong các chương trình chuyên sâu về lập trình trí tuệ nhân tạo, logic tính toán, và hệ chuyên gia. Việc đưa Prolog vào giáo trình đại học giúp sinh viên tiếp xúc với một logic programming paradigm khác biệt, rèn luyện khả năng giải quyết vấn đề theo hướng khai báo và suy luận. Điều này trang bị cho họ một góc nhìn đa chiều về khoa học máy tính và củng cố nền tảng tư duy logic, là những kỹ năng thiết yếu cho các ngành công nghệ thông tin hiện đại. Sự hiện diện của các giáo trình lập trình logic Prolog | Đại học Quốc Gia như cuốn của PGS. Phan Huy Khánh khẳng định giá trị học thuật bền vững của ngôn ngữ này.

6.3. Khuyến nghị sử dụng SWI Prolog và môi trường phát triển

Để thực hành lập trình logic Prolog, việc chọn một môi trường phát triển phù hợp là rất quan trọng. Giáo trình lập trình logic Prolog | Đại học Quốc Gia khuyến nghị sử dụng SWI-Prolog, một trong những cài đặt Prolog phổ biến và mạnh mẽ nhất hiện nay. SWI-Prolog không chỉ miễn phí mà còn cung cấp một môi trường phát triển tích hợp (IDE) thân thiện, cùng với nhiều thư viện và công cụ hỗ trợ. Bên cạnh SWI-Prolog, GNU Prolog cũng là một lựa chọn đáng cân nhắc. Phần phụ lục của cuốn giáo trình lập trình logic Prolog | Đại học Quốc Gia cung cấp hướng dẫn chi tiết về cách cài đặt và sử dụng SWI-Prolog trên các hệ điều hành phổ biến, giúp sinh viên dễ dàng bắt đầu viết và chạy các chương trình Prolog. Việc làm việc trực tiếp với các môi trường này giúp người học củng cố kiến thức về cú pháp Prolog, cấu trúc dữ liệu Prolog, và trải nghiệm thực tế quá trình suy luận logic của ngôn ngữ.

27/09/2025

Trích đoạn nội dung tài liệu

Mở đầu về ngôn ngữ Prolog 11 Với mọi X và Y, nếu X là cha (hay mẹ) của Y thì Y là con của X. Có sự khác nhau cơ bản giữa sự kiện và luật. Một sự kiện, chẳng hạn : parent(tom, liz). là một điều gì đó luôn đúng, không có điều kiện gì ràng buộc.

Trong khi đó, các luật liên quan đến các thuộc tính chỉ được thoả mãn nếu một số điều kiện nào đó được thoả mãn. Mỗi luật bao gồm hai phần: • phần bên phải (RHS: Right Hand Side) chỉ điều kiện, còn được gọi là thân (body) của luật, và • phần bên trái (LH: Left Hand Side S) chỉ kết luận, còn được gọi là đầu (head) của luật. Nếu điều kiện parent(X, Y) là đúng, thì child(Y, X) cũng đúng và là hậu quả lôgich của phép suy luận (inference). đầu thân Câu hỏi sau đây giải thích cách Prolog sử dụng các luật : Liz có phải là con của Tom không ? ?- child(liz, tom) Thực tế, trong chương trình không có sự kiện nào liên quan đến con, mà ta phải tìm cách áp dụng các luật.

Luật trên đây ở dạng tổng quát với các đối tượng X và Y bất kỳ, mà ta lại cần các đối tượng cụ thể liz và tom. Ta cần sử dụng phép thế (substitution) bằng cách gán giá trị liz cho biến Y và tom cho X. Người ta nói rằng các biến X và Y đã được ràng buộc (bound) : X = tom và Y = liz Lúc này, phần điều kiện có giá trị parent(tom, liz) và trở thành đích con (sub-goal) để Prolog thay thế cho đích child(liz, tom). Tuy nhiên, đích này thoả mãn và có giá trị Yes vì chính là sự kiện đã thiết lập trong chương trình.

Sau đây, ta tiếp tục bổ sung các quan hệ mới. Quan hệ mẹ mother được định nghĩa như sau (chú ý dấu phẩy chỉ phép hội hay phép và lôgich) : mother(X, Y) :- parent(X, Y), woman(X). 12 Lập trình lôgic trong Prolog được hiểu là : Với mọi X và Y, X là mẹ của Y nếu X là cha (hay mẹ) của Y và X là nữ. Đồ thị sau đây minh hoạ việc định nghĩa các quan hệ child, mother và grandparent sử dụng một quan hệ khác : Trong đồ thị, người ta quy ước rằng : các nút tương ứng với các đối tượng (là các đối của một quan hệ).

Các cung nối các nút tương ứng với các quan hệ nhị phân, được định hướng từ đối thứ nhất đến đối thứ hai của quan hệ. Một quan hệ đơn được biểu diễn bởi tên quan hệ tương ứng với nhãn của đối tượng đó. Các quan hệ cần định nghĩa sẽ được biểu diễn bởi các cung có nét đứt. Mỗi đồ thị được giải thích như sau : nếu các quan hệ được chỉ bởi các cung có nét liền được thoả mãn, thì quan hệ biểu diễn bởi cung có nét đứt cũng được thoả mãn.

woman X X X parent child parent mother parent grandparent Y Y Y parent Z Hình III. Định nghĩa quan hệ con, mẹ và ông bà sử dụng một quan hệ khác. Như vậy, quan hệ ông−bà grandparent được viết như sau : grandparent(X, Z) :- parent(X, Y), parent(Y, Z). Để thuận tiện cho việc đọc chương trình Prolog, ta có thể viết một luật trên nhiều dòng, dòng đầu tiên là phần đầu của luật, các dòng tiếp theo là phần thân của luật, mỗi đích trên một dòng phân biệt.

Bây giờ quan hệ grandparent được viết lại như sau : grandparent(X, Z) :- parent(X, Y), parent(Y, Z). Ta tiếp tục định nghĩa quan hệ chị em gái sister như sau : Với mọi X và Y, X là một chị (em) gái của Y nếu (1) X và Y có cùng cha (cùng mẹ), và (2) X là nữ. Z parent parent woman X sister Y Hình III. Định nghĩa quan hệ chị (em) gái.

Chú ý cách giải thích điều kiện X và Y có cùng cha mẹ : một Z nào đó phải là một cha mẹ của X, và cũng Z đó phải là một cha mẹ của Y. Hay nói một cách khác là : Z1 là một cha mẹ của X, Z2 là một cha mẹ của Y, và Z1 đồng nhất với Z2. An là nữ, Ann và Sue cùng cha mẹ nên Ann là chị em gái của Sue, ta có : ?- sister(ann, sue). Yes Ta cũng có thể hỏi ai là chị em gái của Sue như sau : ?- sister(X, sue).

Prolog sẽ lần lượt đưa ra hai câu trả lời : X = ann ->; X = sue ->. Yes Vậy thì Sue lại là em gái của chính mình ?! Điều này sai vì ta chưa giải thích rõ trong định nghĩa chị em gái. Nếu chỉ dựa vào định nghĩa trên đây thì câu trả lời của Prolog là hoàn toàn hợp lý. Prolog suy luận rằng X và Y có thể đồng nhất với nhau, mỗi người đàn bà có cùng cha mẹ sẽ là em gái của chính mình.

Ta cần sửa lại định nghĩa bằng cách thêm vào điều kiện X và Y khác nhau. Như sẽ thấy sau này, Prolog có nhiều cách để giải quyết, tuy nhiên lúc này ta giả sử rằng quan hệ : different(X, Y) đã được Prolog nhận biết và được thoả mãn nếu và chỉ nếu X và Y không bằng nhau. Định nghĩa chị (em) gái mới như sau : sister(X, Y) :- parent(Z, X), parent(Z, Y), woman(X).2 : Ta lấy lại ví dụ cổ điển sử dụng hai tiên đề sau đây : 14 Lập trình lôgic trong Prolog Tất cả mọi người đều chết. Socrate là một người.

Ta viết trong Prolog như sau : mortal(X) :- man(X). Một định lý được suy luận một cách lôgich từ hai tiên đề này là Socrate phải chết. Ta đặt các câu hỏi như sau : ?- mortal(socrate). Yes Ví dụ III.3 : Để chỉ Paul cũng là người, còn Bonzo là con vật, ta viết các sự kiện : man(paul).

Con người có thể nói và không phải là loại vật, ta viết luật : speak(X) :- man(X), not(animal(bonzo)). Ta đặt các câu hỏi như sau : ?- speak(bonzo). Yes Ví dụ III.4 : Ta đã xây dựng các sự kiện và các luật có dạng vị từ chứa tham đối, sau đây, ta lấy một ví dụ khác về sự kiện và luật không chứa tham đối : 'It is sunny'. 'It is summer'.

'It is hot' :- 'It is summer', 'It is sunny'. 'It is cold' :- 'It is winter', 'It is snowing'. Từ chương trình trên, ta có thể đặt câu hỏi : ?- 'It is hot'. Yes Câu trả lời 'It is hot' là đúng vì đã có các sự kiện 'It is sunny' và 'It is summer' trong chương trình.

Còn câu hỏi « ?- 'It is cold.' » có câu trả lời sai. Mở đầu về ngôn ngữ Prolog 15 III. Định nghĩa luật đệ quy Bây giờ ta tiếp tục thêm một quan hệ mới vào chương trình. Quan hệ này chỉ sử dụng quan hệ parent, và chỉ có hai luật.

Luật thứ nhất định nghĩa các tổ tiên trực tiếp, luật thứ hai định nghĩa các tổ tiên gián tiếp. Ta nói rằng X là một tổ tiên gián tiếp của Z nếu tồn tại một liên hệ cha mẹ (ông bà) giữa X và Z : Trong cây gia hệ ở Hình III.1, Tom là tổ tiên trực tiếp của Liz, và tổ tiên gián tiếp của Sue. Ta định nghĩa luật 1 (tổ tiên trực tiếp) như sau : Với mọi X và Z, X là một tổ tiên của Z nếu X là cha mẹ của Z. X X parent ancestor parent Z (a) parent ancesto r parent Y (b) Hình III.

Quan hệ tổ tiên : (a) X là tổ tiên trực tiếp của Z, (b) X là tổ tiên gián tiếp của Z. Định nghĩa luật 2 (tổ tiên gián tiếp) phức tạp hơn, trình Prolog trở nên dài dòng hơn, mỗi khi càng mở rộng mức tổ tiên hậu duệ như chỉ ra trong Hình III. Kể cả luật 1, ta có quan hệ tổ tiên được định nghĩa như sau : ancestor(X, Z) :- % luật 1 định nghĩa tổ tiên trực tiếp parent(X, Z). 16 Lập trình lôgic trong Prolog ancestor(X, Z) :- % ngũ đại đồng đường parent(X, Y1), parent(Y1, Y2), parent(Y2, Y3), parent(Y3, Z).

Tuy nhiên, tồn tại một cách định nghĩa tổ tiên gián tiếp ở mức bất kỳ nhờ phép đệ quy (recursive) như sau : Với mọi X và Z, X là một tổ tiên của Z nếu tồn tại Y sao cho (1) X là cha mẹ của Y và (2) Y là một tổ tiên của Z. X X X parent parent ancestor Y1 Y Y1 parent parent ancestor Y2 ancestor Z Y2 parent Y3 Z Z Hình III. Các cặp tổ tiên hậu duệ gián tiếp ở các mức khác nhau. X = jim ->; X = ann ->; X = sue ->; X = bill Yes Mở đầu về ngôn ngữ Prolog 17 Trong Prolog, hầu hết các chương trình phức tạp đều sử dụng đệ quy, đệ quy là một khả năng mạnh của Prolog.

Z ancestor Hình III.Dạng đệ quy của quan hệ tổ tiên (được quay ngang cho thuận tiện). Cho đến lúc này, ta đã định nghĩa nhiều quan hệ (parent, woman, man, grandparent, child, sister, mother và ancestor). Ta thấy mỗi quan hệ chỉ tương ứng với một mệnh đề, tuy nhiên, quan hệ ancestor lại có hai mệnh đề. Người ta nói rằng những mệnh đề này liên quan (concern) đến quan hệ ancestor.

Trong trường hợp tất cả các mệnh đề đều liên quan đến một quan hệ, người ta nhận được một thủ tục (procedure). Sử dụng biến trong Prolog Khi tính toán, NSD có thể thay thế một biến trong một mệnh đề bởi một đối tượng khác. Lúc này ta nói biến đã bị ràng buộc. Các biến xuất hiện trong một mệnh đề được gọi là biến tự do.

Người ta giả thiết rằng các biến là được lượng tử toàn thể và được đọc là «với mọi». Tuy hiên có nhiều cách giải thích khác nhau trong trường hợp các biến chỉ xuất hiện trong phần bên phải của luật. có thể được đọc như sau : (a) Với mọi X và Y, nếu X là cha (hay mẹ) của Y thì X có một người con. Khi một biến chỉ xuất hiện một lần trong một mệnh đề thì không cần đặt tên cho nó.

Prolog cho phép sử dụng các biến nặc danh (anonymous variable) là các biến có tên chỉ là một dấu gạch dưới dòng _. Ta xét ví dụ sau : have_a_child(X) :- parent(X, Y). 18 Lập trình lôgic trong Prolog Luật trên nêu lên rằng với mọi X, X có một con nếu X là cha của một Y nào đó. Ta thấy đích have_a_child không phụ thuộc gì vào tên của con, vì vậy có thể sử dụng biến nặc danh như sau : have_a_child(X) :- parent(X, _).

Mỗi vị trí xuất hiện dấu gạch dưới dòng _ trong một mệnh đề tương ứng với một biến nặc danh mới.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ