[Prolog] การใช้ Variables ใน Prolog

Neverrest
Neverrest
2 min readFeb 10, 2021

--

จากบทความที่แล้ว เราได้กล่าวถึง 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

Find possible value in variables
Find possible value in variables

เราจะเห็นว่าใน 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 เพื่อหาว่ามีค่าใดบ้างที่เป็นไปได้ แต่ในกรณีที่เราต้องการรู้แค่ว่ามีค่าที่เป็นไปได้ใช่หรือไม่อย่างเดียว โดยไม่ต้องการรู้ว่าค่านั้นเป็นอะไรล่ะ จะทำยังไง อย่างเช่น

hates(X, david).
hates(X, david).

ผมกำหนด facts เพิ่ม นั่นคือ hates ทั้ง 3 clauses ซึ่งถ้าเป็นปกติเราก็สามารถถามได้ว่าใครเกียจใครได้ โดยเราอาจจะถามว่าใครเกียจ david ซึ่งจะได้ผลลัพธ์เป็น james และ amelia แต่ถ้าเราไม่ต้องการทราบว่าใครเกียจ แต่แค่รู้ว่ามีคนเกียจหรือไม่แค่นั้นพอ เราจะใช้ anonymous variable ครับ

Anonymous Variable
Anonymous Variable

anonymous variable มีหน้าตาเป็น _ (underscore) นั่นเองครับ โดยถ้ามีอย่างน้อยหนึ่งค่าที่เป็นไปได้ นั่นคือมีอย่างน้อยหนึ่งคนที่เกียจ david ใน console ก็จะแสดงผลลัพธ์เป็น true นั่นเองครับ แล้วเราก็สามารถกด ; เพื่อดูว่ามีจำนวนเท่าไหร่ได้อีกด้วย

📗 Trick: การใข้งาน Action

Action in Prolog
Action in Prolog

ใน console เราสามารถกด Ctrl + Cและกดปุ่ม h เพื่อใช้งาน Action ได้ ซึ่งจะมีทั้งหมด 8 คำสั่ง แต่หลัก ๆ เราจะใช้ a: abort เวลาต้องการออกจาก file ที่เรากำลังใช้ query อยู่ ส่วนคำสั่งอื่น ๆ ทุกท่านลองศึกษาดูนะครับ ในบทความหน้าเราจะมาพูดถึง Structure, Equality และ Unification กันครับ 👇

📑 แหล่งอ้างอิง

--

--

Neverrest
Neverrest

A strong enthusiastic Full Stack Software Engineer with a passion for web development. Game Master | Fortune Teller | Trader | Magician