จากบทความที่แล้ว เราได้กล่าวถึง data types ที่สำคัญ หนึ่งในนั้นคือ Variable ซึ่งทำให้เราสามารถสร้าง rules ขึ้นมาได้ เรามาดูคุณสมบัติของ Variable กันอีกครั้งนะครับ
📘 Variable คืออะไร
เป็น string ที่สามารถประกอบด้วยตัวอักษรภาษาอังกฤษแบบ uppercase, lowercase, underscore และตัวเลข แต่ต้องขึ้นต้นด้วยตัวอักษร uppercase หรือ underscore เท่านั้น เช่น X, Y, Cat, _name
dating(X, Y) :- likes(X,Y), likes(Y,X).
rules ที่กำหนดดังด้านบนจะเห็นว่า variables นั้นคือ X และ Y เรามาลองดูกันครับว่าเราจะใช้ประโยชน์จาก variable ได้ยังไงบ้าง
หาค่าที่เป็นไปได้ใน Rules
เราจะเห็นว่าใน console เมื่อเราใช้คำสั่ง dating(X, Y).
แล้ว จะให้ผลลัพธ์เป็นค่า X, กับ Y ที่เป็นไปได้ นั่นคือ X = william และ Y = amelia
ซึ่งมีประโยชน์มาก ๆ เวลาที่เรามี facts และ rules จำนวนมาก แล้วต้องการทราบผลลัพธ์ของ rules ทั้งหมดที่เป็นไปได้
📕 หาค่าที่เป็นไปได้ใน Facts
ผมได้ลองเพิ่ม fact อีกหนึ่ง fact นั่นคือ likes(james, julia).
จากนั้นถ้าเราอยากทราบว่า fact ที่เราต้องการ ถ้าเราให้ variable X เป็นค่า ๆ หนึ่งแล้ว variable Y จะมีค่าเป็นอย่างไร เช่น
likes(james, X).
X = amelia; // กด ; เพื่อดู X ตัวต่อไป
X = julia.
เราต้องการทราบว่าถ้าให้ likes(james, X).
แล้ว X มีค่าเป็นอะไรได้บ้าง ซึ่งก็ได้ผลลัพธ์เป็น amelia และ julia ตรงตาม facts ที่กำหนดไว้นั่นคือ likes(james, amelia).
กับ likes(james, julia).
เหตุผลที่ทำไม amelia ถึงขึ้นมาก่อน julia นั่นเป็นเพราะ Prolog จะอ่านจากบรรทัดบนลงมาด้านล่าง ซึ่ง
likes(james, amelia).
อยู่ก่อนจึงทำให้แสดงค่า amelia ก่อนนั่นเอง
📙 Anonymous Variable
ปกติแล้วเราจะใช้ variable เพื่อหาว่ามีค่าใดบ้างที่เป็นไปได้ แต่ในกรณีที่เราต้องการรู้แค่ว่ามีค่าที่เป็นไปได้ใช่หรือไม่อย่างเดียว โดยไม่ต้องการรู้ว่าค่านั้นเป็นอะไรล่ะ จะทำยังไง อย่างเช่น
ผมกำหนด facts เพิ่ม นั่นคือ hates ทั้ง 3 clauses ซึ่งถ้าเป็นปกติเราก็สามารถถามได้ว่าใครเกียจใครได้ โดยเราอาจจะถามว่าใครเกียจ david ซึ่งจะได้ผลลัพธ์เป็น james และ amelia แต่ถ้าเราไม่ต้องการทราบว่าใครเกียจ แต่แค่รู้ว่ามีคนเกียจหรือไม่แค่นั้นพอ เราจะใช้ anonymous variable ครับ
anonymous variable มีหน้าตาเป็น _ (underscore) นั่นเองครับ โดยถ้ามีอย่างน้อยหนึ่งค่าที่เป็นไปได้ นั่นคือมีอย่างน้อยหนึ่งคนที่เกียจ david ใน console ก็จะแสดงผลลัพธ์เป็น true นั่นเองครับ แล้วเราก็สามารถกด ; เพื่อดูว่ามีจำนวนเท่าไหร่ได้อีกด้วย
📗 Trick: การใข้งาน Action
ใน console เราสามารถกด Ctrl + C
และกดปุ่ม h เพื่อใช้งาน Action ได้ ซึ่งจะมีทั้งหมด 8 คำสั่ง แต่หลัก ๆ เราจะใช้ a: abort เวลาต้องการออกจาก file ที่เรากำลังใช้ query อยู่ ส่วนคำสั่งอื่น ๆ ทุกท่านลองศึกษาดูนะครับ ในบทความหน้าเราจะมาพูดถึง Structure, Equality และ Unification กันครับ 👇
📑 แหล่งอ้างอิง