Trao đổi về lập trình Prolog

Hi all,

Mình đang tìm hiểu về LT Prolog để làm bài tập của Thầy Phúc.
Mình tìm được 1 ví dụ đơn giản, dể hiểu nên up lên để các bạn tham khảo.
Ai có tài liệu thì up lên nhé!

Chúc sức khỏe!

Thanks bạn Trung nhiều nha!
Tài liệu rất hay!
Mình cũng tìm được tài liệu slide bài giảng về Prolog của một thầy ở ĐHBK
Chia sẽ cùng các bạn!

sorry, test thử post được không.

Trong Visual Prolog có 2 predicates quan trọng:

  1. assert (facts): dùng để nạp 1 thêm sự kiện vào trong cơ sở dữ liệu suy diễn trong Prolog Engine

  2. consult: cho phép nạp sự kiện và luật từ file, cấu trúc file được nạp có cú pháp giống như là syntax của prolog.

Trong quá trình bổ xung cơ chế suy diễn cho 1 CSDL đã có sẵn chắc chắn chúng ta sẽ gặp predicates này.

Hiện nay mình vẫn nghĩ là việc bổ xung cơ chế suy diễn cho 1 CSDL có sẵn có vẻ thực dụng hơn vì hiện nay CSDL hầu như mọi nơi đã có sẵn và chúng ta đa phần không có quyền thay đổi. Với hướng đi này tạm thời sẽ có mô hì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–>
(DBMS) => (Ứng Dụng) => (Prolog Engine) =

                        • ** ^* * * * * * * * * * * * * * * * * ** ||
                        • ** ||* * * * * * * * * * * * * * * * * ** ||
                        • ** <=================

<!–QuoteEnd–></td></tr></table><div class=‘postcolor’><!–QuoteEEnd–>
Giả sử mình Ứng dụng mình làm bằng ngôn ngữ cấp cao C# thì vấn đề gì cần giải quyết? Chắc có lẽ là: liên lạc giữa C# và Prolog

<b>THỬ NGHIỆM C# GỌI VISUAL PROLOG V7.1</b>

  1. Tạo prolog DLL trong Visual Prolog v7.1:

*) Tạo 1 project dạng DLL

*) Build để tạo ra các file source

*) Trong main.cl, khai báo predicate 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–>
predicates

  • getHelloWorld : (string8 In) -> string8 OutStr
      • *procedure (i)
      • *language c
      • *as “getHelloWorld”.
        <!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>
        *) trong main.pro, implement predicates 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–>
        clauses
  • *getHelloWorld(InStr) = OutStr:-
      • *StrTemp = string8::mapToString(InStr),
      • *JoinStr = string::concat(StrTemp, " Hello World from ViP 7.1"),
          • *OutStr = string8::mapFromString(JoinStr).
            <!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>
            *) Export predicate ra để C# có thể gọi. Tạo 1 file sample.def, trong project settings trỏ tới file này. Nội dung 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–>
            EXPORTS
  • *getHelloWorld
    <!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>
    *) Build để tạo file DLL
  1. Dùng C# để gọi Prolog predicate

*) Khai báo
<!–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–>

      • *[DllImport(@“F:\Work\Prolog\ConsolePIE\ConsolePIE\CorePIE.dll”)]
      • *public extern static string getHelloWorld(string strInput);
        <!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>
        *) Thực hiện gọi predicate
        <!–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–>
      • *string strText = “String from C#.”;
      • *strText = getHelloWorld(strText);
        <!–c2–></td></tr></table><div class=‘postcolor’><!–ec2–>
        *) Xem kết quả: strText sẽ là “<b>String from C#. Hello World from ViP 7.1</b>”

Thành công rồi <!–emo&:)–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/smile.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘smile.gif’ /><!–endemo–> …

Oh, chưa đâu, vì có lẽ vấn đề khó khăn vẫn là passing data từ C# qua prolog và ngược lại. Nói đơn giản là để có thể dùng assert để nạp facts cho Prolog engine và nạp luật bằng consult (tự động).

Mục tiêu là mình có thể query câu trả lời từ prolog dựa vào tập tình huống (sự kiện, luật), sự kiện lấy từ DBMS, luật thì ta xây dựng… Có vẻ khả thi nhưng hiện nay mình cũng còn gặp nhiều khó khăn như đã nói ở trên… vài dòng suy nghĩ miên man…

Chúc mọi người học tốt.

Tài liệu rất hay và bổ ích. Thanks các anh nhiều!

Chào các bạn. Mình có tìm hiểu qua thì hiện có 2 chương trình lập trình Prolog là Visual Prolog và SWI-Prolog.

Các bạn có thể download tại các địa chỉ sau :

Visual Prolog: <a href=‘http://www.visual-prolog.com/’ target=‘_blank’>http://www.visual-prolog.com/&lt;/a&gt;
SWI Prolog: <a href=‘http://www.swi-prolog.org/’ target=‘_blank’>http://www.swi-prolog.org/&lt;/a&gt;

Trên đó vừa có link down phần mềm, vừa có các guilide hướng dẫn lập trình.

Mình cũng có tìm được một số tài liệu hướng dẫn lập trình logic với prolog, xin được share cùng cả lớp tại địa chỉ :

<a href=‘http://www.mediafire.com/?sharekey=f55167cf90f6db16aaca48175a79d1c3242a72734e085fbf480654b192e70f3f’ target=‘_blank’>http://www.mediafire.com/?sharekey=f55167c...80654b192e70f3f&lt;/a&gt;

Chúc cả lớp học tốt môn này cũng như các môn sau.

PS: chú ý là chúng ta vẫn còn phải làm tiểu luận môn “Cơ sở tri thức” của thầy Kiếm (mình thì vẫn chưa tìm ra ý tưởng <!–emo&:(–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/sad.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘sad.gif’ /><!–endemo–> )

Thân,

Trung <!–emo&:)–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/smile.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘smile.gif’ /><!–endemo–>

Chào các bạn,

Mình xin bổ sung thêm một website về prolog cũng rất hay.

Các bạn xem ở đây: <a href=‘http://www.probp.com/’ target=‘_blank’>http://www.probp.com/&lt;/a&gt;

Và có một điều thú vị mình đang tìm hiểu thông qua các phần mềm Visual Prolog, SWI-Prolog và B-Prolog đó là:

“B-Prolog provides a bi-directional interface with C and Java. This interface makes it possible to integrate applications developed in B-Prolog with those developed in C, C++, and Java such as DBMS systems, Servlet, JSP, COM, and 3D graphics packages.”

Mọi người cố gắng tìm hiểu cái này nha.

Thân,

Trung <!–emo&:)–><img src=‘http://www.uit.edu.vn/forum/html/emoticons/smile.gif’ border=‘0’ style=‘vertical-align:middle’ alt=‘smile.gif’ /><!–endemo–>