📗 Structure
จากบทความที่ผ่านมาเราจะเห็นโครงสร้างของภาษา Prolog ที่เป็น facts กับ rules แบบง่าย ๆ เช่น owns(marcus, book).
ในบทความนี้เราลองมาดู structure แบบที่ซับซ้อนขึ้นกันครับ
ถ้าเรามีความสัมพันธ์ที่มากขึ้นอย่างเช่น John เป็นเจ้าของ book ที่ชื่อ wonderland และ author ของ book เล่มนี้คือ Carlos และ Julia คำถามคือ เราจะเขียนความสัมพันธ์ยังไงดีล่ะ
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 กันครับ 👇
แหล่งข้อมูล