Hướng dẫn sử dụng SWI-Prolog

<span style=‘color:red’><span style=‘font-size:14pt;line-height:100%’>Hướng dẫn sử dụng SWI-Prolog</span></span>

<span style=‘color:blue’><b>1. Giới thiệu</b></span>
SWI-Prolog là phần mềm soạn thảo và biên dịch các chương trình Prolog. SWI-Prolog hoàn toàn miễn phí và rất thích hợp cho nghiên cứu và dạy học.

Một số điểm mạnh của SWI-Prolog bao gồm:

  • Môi trường thân thiện.
  • Biên dịch cực nhanh.
  • Hỗ trợ phân tích thực thi.
  • Linh động (có thể kết hợp với chương trình viết bằng C).

Website chính thức: <a href=‘http://www.swi-prolog.org’ target=‘_blank’>www.swi-prolog.org</a>

<span style=‘color:blue’><b>2. Cài đặt</b></span>
Download phần mềm SWI-Prolog tại <a href=‘http://www.swi-prolog.org/Download.html’ target=‘_blank’>www.swi-prolog.org/Download.html </a>
Link trực tiếp: <a href=‘http://www.swi-prolog.org/download/stable/bin/w32pl5100.exe’ target=‘_blank’>www.swi-prolog.org/download/stable/bin/w32pl5100.exe</a>

Download SWI-Prolog Editor tại <a href=‘http://www.swi-prolog.org/IDE.html’ target=‘_blank’>www.swi-prolog.org/IDE.html</a>
Link trực tiếp: <a href=‘http://download.bildung.hessen.de/lakk/netzwerk/faecher/informatik/swiprolog/setup.zip’ target=‘_blank’>download.bildung.hessen.de/lakk/netzwerk/faecher/informatik/swiprolog/setup.zip</a>

SWI-Prolog Editor là hỗ trợ phần mềm soạn thảo chương trình Prolog rất trực quan, hiệu quả và tiện dụng. Bạn phải cài đặt SWI-Prolog trước khi cài đặt SWI-Prolog Editor.

<span style=‘color:blue’><b>3. Chạy thử</b></span>
Khởi động SWI-Prolog Editor.
Vào trình đơn File/New
Nhập chương trình sau:

<!–c1–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>CODE</b> </td></tr><tr><td id=‘CODE’><!–ec1–>loai_an_co(de).
loai_hung_du(chosoi).

loai_an_thit(X) :- loai_hung_du(X).
an(X, thit) :- loai_an_thit(X).
an(X, co) :- loai_an_co(X).
an(X, Y) :- loai_an_thit(X), loai_an_co(Y).
uong(X, nuoc) :- loai_an_co(X).
uong(X, nuoc) :- loai_an_thit(X).
tieu_thu(X, Y) :- uong(X, Y).
tieu_thu(X, Y) :- an(X, Y).<!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>

Bấm F9 để biên dịch vào chạy. Kết quả như sau:

<!–QuoteBegin–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>QUOTE</b> </td></tr><tr><td id=‘QUOTE’><!–QuoteEBegin–>1 ?- consult(‘D:/Thanh/Prolog/DongVat.pl’).
% D:/Thanh/Prolog/DongVat.pl compiled 0.00 sec, 2,432 bytes
true.<!–QuoteEnd–></td></tr></table><div class=‘postcolor’><!–QuoteEEnd–>

<img src=‘http://www.uit.edu.vn/forum/uploads/post-66-1278598596.png’ border=‘0’ alt=‘user posted image’ />

Tại khung cửa sổ lệnh bên dưới, thực hiện truy vấn:
<!–c1–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>CODE</b> </td></tr><tr><td id=‘CODE’><!–ec1–>loai_hung_du(X), tieu_thu(X, Y).<!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>

Bấm ; để tiếp tục hiển thị các đáp án cho đến khi kết thúc. Kết quả như sau:

<!–QuoteBegin–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>QUOTE</b> </td></tr><tr><td id=‘QUOTE’><!–QuoteEBegin–>3 ?- loai_hung_du(X), tieu_thu(X, Y).
X = chosoi,
Y = nuoc ;
X = chosoi,
Y = thit ;
X = chosoi,
Y = de.<!–QuoteEnd–></td></tr></table><div class=‘postcolor’><!–QuoteEEnd–>

Mình đã download SWI-Prolog về và copy luôn code của Thanh mà sao không ra kết quả như Thanh, giúp mình về vụ này đi.
Vì nếu không học đc Prolog thì nhiều công việc bị giang dở lắm.
Giúp mình nhé!
Các anh/chi học viên nếu có cao kiến gì cũng xin giúp đỡ kẻ này nhé <!–emo&:rolleyes:–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/rolleyes.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘rolleyes.gif’ /><!–endemo–>
[loai_an_co(de).
loai_hung_du(chosoi).

loai_an_thit(X) :- loai_hung_du(X).
an(X, thit) :- loai_an_thit(X).
an(X, co) :- loai_an_co(X).
an(X, Y) :- loai_an_thit(X), loai_an_co(Y).
uong(X, nuoc) :- loai_an_co(X).
uong(X, nuoc) :- loai_an_thit(X).
tieu_thu(X, Y) :- uong(X, Y).
tieu_thu(X, Y) :- an(X, Y).]

Chào Thầy,

Ngay từ buổi học đầu em đã tính và nghiên cứu kết hợp Prolog và CSDL SQL để xây dựng động cơ suy diễn. Mục tiêu để có thể ứng dụng cơ chế suy diễn trên CSDL đã có sẵn.

Không biết em có thể làm bài thu hoạch theo hướng này. (Hiện tại em đã làm khoảng 70% công việc rồi) ?

Cảm ơn thầy.

<a href=‘http://www.uit.edu.vn/forum/index.php?showtopic=19150&view=findpost&p=120176’ target=‘_blank’>http://www.uit.edu.vn/forum/index.php?show...ndpost&p=120176&lt;/a&gt;

Để đơn giản, bạn có thể gởi file source code .pl cho mình chạy thử ko?

Mình cũng gởi kèm theo đây file source mẫu để bạn kiểm chứng.

<span style=‘color:Red’><span style=‘font-size:14pt;line-height:100%’>Cú pháp SWI-Prolog</span></span>

SWI-Prolog là ngôn ngữ mô tả, mỗi khai báo đều mang ý nghĩa: “Với những giá trị tham số nào thì biểu thức logic nghiệm đúng”.

SWI-Prolog không có định nghĩa kiểu dữ liệu mà chỉ phân biệt hai hình thức của dữ liệu: biến và giá trị.

<span style=‘color:Blue’><b>1. Biến (variable) và giá trị (data value):</b></span>
Giá trị là những thể hiện cụ thể và bất biến của dữ liệu. Biến là đại diện cho các giá trị và có thể thay đổi trong quá trình tính toán. Biến được viết hoa chữ đầu tiên trong khi giá trị thì viết thường.

SWI-Prolog phân biệt hai khái nhiệm: chân lý (fact) và luật (rule).

<span style=‘color:Blue’><b>2. Chân lý (fact):</b></span> là bộ các giá trị thỏa mãn vô điều kiện một vị từ cho trước.

Chân lý có cú pháp như sau: <span style=‘color:red’>identifier</span>(<span style=‘color:blue’>[n-tuple of constants]</span>).

Trong đó, identifier là tên vị từ và [n-tuple of constants] là các giá trị để vị từ trên nghiệm đúng. Ký tự đầu tiên của tên vị từ bắt buộc phải viết thường.

Ví dụ: Viết chương trình khai báo đồ thị sau
<img src=‘http://www.uit.edu.vn/forum/uploads/post-66-1279644308.png’ border=‘0’ alt=‘user posted image’ />

<!–c1–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>CODE</b> </td></tr><tr><td id=‘CODE’><!–ec1–>edge(a, b).
edge(a, e).
edge(b, d).
edge(b, c).
edge(c, a).
edge(e, b).<!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>

<span style=‘color:Blue’><b>3. Luật (rule):</b></span> là điều kiện để một bộ dữ liệu thỏa mãn một vị từ.

Luật có cú pháp như sau: <span style=‘color:red’>Atom</span> :- <span style=‘color:blue’>Atom_1</span>, …, <span style=‘color:blue’>Atom_n</span>.

Trong đó, mỗi Atom là thành phần bao gồm một vị từ cùng với các biến hay giá trị theo sau. Chân lý thực ra cũng là một dạng đặc biệt của Atom.

Để vế bên trái luật nghiệm đúng thì mỗi thành phần bên vế phải luật đều phải nghiệm đúng.

Ví dụ:
<!–c1–></div><table border=‘0’ align=‘center’ width=‘95%’ cellpadding=‘3’ cellspacing=‘1’><tr><td><b>CODE</b> </td></tr><tr><td id=‘CODE’><!–ec1–>tedge(Node1, Node2) :- edge(Node1, SomeNode), edge(SomeNode, Node2).
path(Node1, Node2) :- edge(Node1, Node2).
path(Node1, Node2) :- edge(Node1, SomeNode), path(SomeNode, Node2).<!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>