SWI-Prolog là ngôn ngữ lập trình logic cho phép trả lời câu truy vấn đối với CSTT và là phần mềm hoàn toàn miễn phí. Từ khi bắt đầu vào năm 1987, SWI-Prolog đã được phát triển mạnh mẽ do nhu cầu của các ứng dụng thế giới thực, được sử dụng rộng rãi trong nghiên cứu và giáo dục cũng như các ứng dụng thương mại. SWI-Prolog hoạt động theo hệ thống đơn thể, có giao diện trao đổi hai chiều linh hoạt.
3.2. Cài đặt SWI-Prolog
Đầu tiên vào trang Web của SWI-Prolog: http://www.swi-prolog.org/. Tải file cài đặt SWI- Prolog cho Windows (version 7.2.3): http://www.swi-prolog.org/download/stable dung lượng khoảng 12.2 MB, sau đó thực hiện việc cài đặt theo hướng dẫn trên màn hình. Đường dẫn mặc định chứa SWI-Prolog là: C:\Program Files\swipl Sau khi cài đặt phiên bản SWI-Prolog 7.2.3 cho Windows, rồi khởi động trình swipl-win.exe, cửa sổ làm việc SWI-Prolog hiện ra như hình dưới đây:
Hình 3.1. Cửa sổ làm việc của SWI-Prolog
SWI-Prolog làm việc theo chế độ tương tác. Dấu nhắc lệnh SWI-Prolog là một cặp dấu chấm hỏi và dấu gạch ngang (dấu trừ), được liệt kê thứ tự 1, 2, 3…để theo dõi quá trình làm việc của người sử dụng, theo sau là con trỏ màn hình: 1 ?- Để thoát khỏi SWI-Prolog, dùng lệnh File/ Exit, hoặc dùng vị từ halt: ?- halt.
3.3. Biên dịch CSTT bằng SWI-Prolog
File nhị phân để chạy SWI-Prolog là swipl-win.exe trong thư mục bin của thư mục swipl, CSTT có phần mở rộng là pl và được soạn thảo bằng cách thực hiện lệnh File/new trong menu chính của cửa sổ làm việc SWI-Prolog. Có thể tạo thư mục riêng để lưu CSTT. CSTT chứa khai báo của các sự kiện cũng như các quy tắc và được mở trong SWI-Prolog bằng cách nhấn đúp vào tên file hoặc lệnh sau đây trong cửa sổ làm việc của SWI-Prolog: ?- [swi('thư mục/tênfile')].
3.4. Truy vấn trong SWI-Prolog
Sau khi một CSTT được biên dịch và tải vào bộ nhớ, người sử dụng có thể đặt câu truy vấn (kết thúc bởi một dấu chấm). Tùy theo câu truy vấn, Prolog trả lời Yes hoặc No và kèm theo kết quả X = <value> nếu trong đích có chứa biến X nào đó. Trong trường hợp có nhiều câu trả lời, ngay sau kết quả trả lời đầu tiên, người sử dụng có thể đặt một dấu chấm phẩy “;” nếu muốn tiếp tục yêu cầu Prolog đưa ra các câu trả lời khác. Tiếp tục quá trình này, Prolog lần lượt đưa ra các kết quả khác nhau cho đến khi, hoặc Prolog trả lời No, thì có nghĩa là không còn câu trả lời nào nữa, hoặc Yes, nếu người sử dụng muốn dừng lại bằng cách gõ Enter (↵). Người sử dụng có thể nhận được thông báo lỗi nếu câu truy vấn có vấn đề: ERROR: Undefined procedure <… /…> % người sử dụng đã gõ sai tên thủ tục, hoặc: ERROR: Syntax error: Operator expected % người sử dụng đã gõ sai biểu thức.
3.5. Các quy ước trong SWI-Prolog
- Hằng số, chẳng hạn như 0, 2, 5. - Hằng chuỗi bắt đầu bằng một chữ cái viết thường hoặc ngoài ra có thể được bao gồm trong dấu nháy đơn, chẳng hạn an, binh,„An‟, „Binh‟ là các hằng. - Hằng logic: true, false. - Biến: bắt đầu bằng chữ hoa hoặc dấu gạch ngang dưới „_‟. - Các phần tử của thân quy tắc được ngăn cách bởi dấu phẩy „,‟ - Mỗi quy tắc/sự kiện/truy vấn kết thúc bằng một dấu chấm „.‟ - Ký hiệu “” trong quy tắc được viết là “: -” - Các chú thích bắt đầu với „%‟ (phần còn lại của dòng này sẽ được bỏ qua). - Một CSTT được lưu trữ trong một file với phần mở rộng là pl. 3.6. Cài đặt và thực thi một số ví dụ Ví dụ 1: Xét CSTT biểu diễn số tự nhiên. sotunhien(0) sotunhien(s(X)) sotunhien(X) Quy tắc đầu tiên nói rằng 0 là số tự nhiên, quy tắc thứ hai có ý nghĩa nếu X là số tự nhiên thì s(s(X)) là số tự nhiên. Trong đó,s là hàm 1-ngôi và s(X) để chỉ số kế tiếp của số tự nhiên X, nghĩa là s(X) = X + 1, X là số tự nhiên. Cài đặt chương trình này trong SWI-Prolog, ta được chương trình như sau: sotunhien(0). sotunhien(s(X)) :- sotunhien(X).
Kết quả của truy vấn ? sotunhien(X) được thể hiện ở hình 3.9 dưới đây: