list_student_by_favorite_subject(X) จะลิสต์นักเรียนที่ชอบวิชานั้นๆ ซึ่งถ้าเราระบุว่าวิชาอะไร ก็จะออกมาตามนั้น แต่ถ้าไม่ระบุก็จะลิสต์ออกมาเท่าที่ข้อมูลมีใน NOTE: ไม่ต้องแปลกใจ เมื่อเอาไฟล์ไปรันจริงๆ จะโดน Prolog บ่นเอา แต่รันได้ตามปกตินะ 5555? - [rules]. Warning:! @#$%^&*() //อะไรแบบนี้จะหายไปถ้าหากเราเรียงข้อมูลตามตัวอักษร หรือเอาข้อมูลแบบเดียวกันไปรวมๆกัน ในนี้ไม่ได้เรียง จะได้เห็นอันที่เพิ่มชัดๆ ~! NOTE: เมื่อผลลัพท์เป็นแบบนี้ ก็กด n เพื่อดู ผลลัพธ์ต่อๆไป? - student(X). X = kim //ถ้ากด Enter จะโดนตัดจบทันที =^= X = kim. //แต่ถ้ากด n เรื่อยๆ~ X = kim; X = liam; X = jack.
เราจะสร้างฐานข้อมูลที่มี rules & facts ขึ้นมา เพื่อไว้ใช้หาคำตอบ ซึ่งเราจะใช้ predicate ไว้นิยามค่าความจริง ที่เขียนอยู่ในรูปแบบของ Compound term แน่นอนว่า Prolog คิดเลขได้ แต่… จะใช้คำว่า is แทน == ใช้ _ เป็นค่าใดๆ? - A is ((5*2-3+4)-1)^2. A = 100.? - 100 is ((5*2-3+4)-1)^2. true.? - _ is ((5*2-3+4)-1)^2. true. แต่ว่าถ้าเราใช้ == หรือ = หรือสลับด้านล่ะ???? - A == ((5*2-3+4)-1)^2. false.? - A = ((5*2-3+4)-1)^2. A = (5*2-3+4-1)^2.? - ((5*2-3+4)-1)^2 is 100. false. จะเห็นได้ว่า ตัวแปร หรือ ผลรวมต้องอยู่ทางซ้าย, ตัวแปรต้องเป็นตัวพิมพ์ใหญ่ แล้วยังไงก็ต้องใช้ is … คราวนี้มาลองกะค่าความจริงดูบ้าง เราจะมาทดลองดูกะข้อมูลที่มีกัน โดยที่จะมีเครื่องหมาย, (comma) เป็น and; (semi-colon) เป็น or -> เป็น imply (ถ้า…แล้ว) เราสามารถถามหาค่าได้โดยการติดตัวแปรไว้ หรือหาค่าความจริงว่าเป็น true/false ซึ่งถ้าไม่มีข้อมูล ยังไงก็ false? - [facts1]. true.? - student(X). X = kim; X = liam.? - student(ellen). false.? - not(student(mike)). true.? - teacher(X), not(student(X)). X = mike.? - not(student(X)), teacher(X).
false.? - student(X), ta(X). X = kim;? - student(X);teacher(Y). X = kim; X = liam; Y = mike.? - student(X)->ta(X). X = kim.? - friend_of(kim, _). true.? - friend_of(kim, X). X = jack.? - friend_of(X, Z). X = kim, Z = jack; X = liam, Z = kim.? - listing(student). student(kim). student(liam).? - halt. //exit from Prolog แล้วถ้าเราจะลองใส่ rules ล่ะะ? //เพื่อให้เห็นการใช้งานกฎที่ชัดขึ้น เราจึงเพิ่ม facts เข้าไปอีกนิดหน่อย~ จาก gte(X, Y), lte(X, Y) ถูกสร้างขึ้นมาเพื่อให้เราใช้งานง่ายขึ้น เพราะเครื่องหมายค่อนข้างสับสัน gte ใช้ >= แต่ว่า lte ใช้ =< not(AGE_X is AGE_Y) คือ! (AGE_X==AGE_Y) ที่เขียน older_than(X, Y) แบบนี้เพราะต้องการแสดงตัวอย่างเรื่องเครื่องหมาย เลยดูงงๆไปบ้าง มาดูกันดีกว่า ว่าผลลัพธ์จะเป็นยังไงบ้าง?!!? - [rules]. true.? - older_than(mike, X). X = kim; X = liam; false.? - list_student_by_favorite_subject(math). kim likes math. ***** liam likes math. ***** true.? - list_student_by_favorite_subject(X). ***** jack likes science. ***** true. จะเห็นได้ว่า older_than(mike, X) หาคนที่อายุน้อยกว่า Mike (Mike is older than X. )
SWISH SWI-prolog SWISH SWI-Prolog วิธีแรกคือ ใช้งาน Prolog บน Web Application ที่ชื่อว่า SWISH ของ SWI-prolog โดยเข้าไปที่ SWISH — SWI-Prolog for SHaring () เมื่อเข้าไปให้เราเลือก Create a Program ก็จะได้หน้าต่างดังภาพด้านบน จากนั้นเราก็สามารถเขียน code ได้เลยครับ 2. ดาวโหลด IDE จาก SWI-Prolog SWI-Prolog website for downloading Prolog เริ่มแรกให้เข้าไปที่เว็บไซต์ SWI-Prolog downloads () แล้วเลือกดาวน์โหลดสำหรับระบบปฏิบัติการที่เราใช้งาน จากนั้นก็กดที่ไฟล์ exe ที่เราดาวน์โหลด และทำการ install Find SWI-Prolog in your computer จากนั้นให้เปิด SWI-Prolog ขึ้นมา SWI-Prolog console ก็จะพบกับหน้าต่าง console นี้ครับ ซึ่งเราก็สามารถใช้งาน Editor ที่เขาให้มาได้ โดยคลิกที่ File แล้วเลือก New จากนั้นก็ตั้งชื่อไฟล์แล้วเลือก directory ที่จะ save file SWI-Prolog Editor เมื่อกด save แล้วก็จะมีหน้าต่างใหม่เด้งขึ้นมา เป็น Editor ที่เราจะใช้เขียนภาษา Prolog นั่นเอง ✨