[Prolog] Structure and Equality

Neverrest
Neverrest
2 min readFeb 11, 2021

--

📗 Structure

จากบทความที่ผ่านมาเราจะเห็นโครงสร้างของภาษา Prolog ที่เป็น facts กับ rules แบบง่าย ๆ เช่น owns(marcus, book). ในบทความนี้เราลองมาดู structure แบบที่ซับซ้อนขึ้นกันครับ

ถ้าเรามีความสัมพันธ์ที่มากขึ้นอย่างเช่น John เป็นเจ้าของ book ที่ชื่อ wonderland และ author ของ book เล่มนี้คือ Carlos และ Julia คำถามคือ เราจะเขียนความสัมพันธ์ยังไงดีล่ะ

nested compound terms

nested compound terms
nested compound terms

เราสามารถเขียนความสัมพันธ์แบบ nested หรือซ้อนกันได้ ตามตัวอย่างจะเห็นว่า เรากำหนด facts ที่มีความสัมพันธ์ถึง 3 ความสัมพันธ์ โดยการใช้ nested ซ้อนวงเล็บกัน เช่น

owns(john, book(wonderland, author(carlos, julia))).

หมายความว่า John เป็นเจ้าของ book ที่ชื่อ wonderland และ author ของ book เล่มนี้คือ Carlos และ Julia

ในเรื่องการ query เราสามารถใส่ตัวแปรเพื่อถามได้ว่าค่าที่เป็นไปได้มีอะไรได้บ้าง เช่น

?- owns(john, book(X, author(carlos, julia))).
X = wonderland.

📙 Equality & Unification

การตรวจสอบว่า term 2 terms นั้นเท่ากันหรือไม่ เราจะใช้เครื่องหมาย = เช่น X=Y จะได้ผลลัพธ์เป็น true ถ้ามีค่าเท่ากัน แต่ถ้าไม่เท่ากันก็จะได้ false โดยการจะเท่ากันได้นั้น มีกฎดังนี้

กรณีที่ X, Y เป็น variables

X = Y
Y = 10
X = 10 // result

ถ้า X มี data type เป็นชนิด atom แล้ว X จะเท่ากับตัวเองเสมอ

?- dog=dog.
true.
?- dog='dog'.
true.
?- dog=cat.
false.
?- 64=64.
true.

กรณีที่ X,Y เป็น structure จะเท่ากันได้ต่อเมื่อ

  • same function
  • same number of component
  • corresponding components are equal

จากประโยชน์ของ equality & unification ทำให้เราสามารถนำ facts หรือ rules มาเทียบกันเพื่อหาว่ามีค่าเป็นจริงหรือเท็จ และสามารถนำไปหาค่าที่เป็นไปได้เมื่อทั้งสองเท่ากันได้อีกด้วย

ในบทความต่อไปเราจะมาพูดถึง Arithmetic และ Relational Operators กันครับ 👇

แหล่งข้อมูล

--

--

Neverrest
Neverrest

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