Prolog

**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íc". 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 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.

## Cú pháp
Một chương trình Prolog bao gồm các luật được biểu diễn dưới dạng mệnh đề Horn. Một mệnh đề Horn có dạng

 Head:-Body.

Head là một vị từ logic, còn Body có thể là rỗng hoặc là một tập các vị từ logic. Ví dụ như sau:

 chẵn(X):- X chia_dư 2 = 0.

Phần lớn các bộ dịch của các chương trình Prolog đều yêu cầu vị từ logic ở phần đầu của một mệnh đề Horn là một vị từ dương (không có dấu phủ định đi kèm), còn các vị từ trong phần Body có thể có dấu phủ định đi kèm. Chương trình logic mà không có sự xuất hiện của dấu phủ định đi kèm gọi là chương trình logic xác định, còn không thì được gọi là chương trình logic thường.

### Dữ kiện
Dữ kiện là những mệnh đề Horn mà phần Body là rỗng. Kiểu mệnh đề này thường được sử dụng để mô tả các dự kiện của bài toán, ví dụ như việc khai báo "tôm" là một con mèo:

 mèo(tôm).

Khoảng cách từ Hà Nội vào thành phố Hồ Chí Minh là khoảng 2000Km:

 khoảng_cách(Hà_Nội,TP_Hồ_Chí_Minh,2000).

### Luật
Phần còn lại của các mệnh đề trong một chương trình Prolog được gọi là luật. Nó thường thể hiện những phát biểu logic trong bài toán, ví dụ như nếu công tắc đèn bật thì đèn sáng:

 đèn_sáng(X):- công_tắc_bật(X).

Toán tử ":-" được dịch thô là "nếu", trong logic thì nó đại diện cho toán tử suy ra "*Giao diện với C/Java cũng có thể được sử dụng cho đồ hoạ và các điều khiển.

## Xem thêm
* HiLog và λProlog mở rộng Prolog với các tính năng bậc cao.
* InterProlog , Bộ thư viện cho phép kết nối giữa Java và Prolog. Hỗ trợ XSB, SWI-Prolog và YAP.
* Prova Prolog có tích hợp Java cho phép người dùng kết hợp cú pháp và thư viện của Java trong Prolog.

## Tham khảo

## Liên kết ngoài

### Một số cài đặt
* WIN Prolog  của Logic Programming Associates
* Open Prolog, cài đặt cho Apple Mac.
* Ciao Prolog, mã mở tuân theo GPL và LGPL
* GNU Prolog, hoặc gprolog, mã mở tuân theo GPL
* YAP Prolog , mã mở tuân theo Artistic License
* SWI-Prolog, mã mở tuân theo LGPL
* SICStus Prolog, một phiên bản thương mại, có hỗ trợ lập trình ràng buộc
* ECLiPSe Prolog  một phiên bản thương mại
* XSB, mã mở tuân theo LGPL

### Hướng dẫn học
* Prolog Tutorial  by J.R.Fisher
* Visual Prolog Tutorial 
* Runnable examples by Lloyd Allison
* Visual Prolog Examples 
* Logic Programming and Prolog (2ed) by Ulf Nilsson and Jan Maluszynski
*  Prolog Programming A First Course  by Paul Brna
* Adventure in Prolog, online book by Amzi! Inc.
* On-line guide to Prolog Programming by Roman Bartak
* Learn Prolog Now!  by Patrick Blackburn, Johan Bos and Kristina Striegnitz

### Lập trình nâng cao
* Richard O'Keefe, *The Craft of Prolog*, ISBN 0-262-15039-5.
* Building Expert Systems in Prolog, online book by Amzi! Inc.

### Hội thảo
* ICLP  Hội thảo quốc tế về lập trình lô-gíc
* INAP Hội thảo quốc tế về lập trình khai báo và quản lý tri thức

### Các nguồn khác
* comp.lang.prolog FAQ 
* Prolog: The ISO standard
* Prolog Development Center