[Prolog] Arithmetic and Relational Operators สัญลักษณ์ทางคณิตศาสตร์พื้นฐานใน Prolog
📘 Arithmetic Operator
ในภาษา Prolog เราก็มีสัญลักษณ์ทางคณิตศาสตร์เหมือนกับภาษาอื่น ๆ ดังนี้ครับ
- X+Y = addition
- X - Y = subtraction
- X * Y = multiplication
- X**Y หรือ X^Y = Exponentiation
- X / Y = division
- X // Y = floor division (หารไม่เอาเศษ)
- X mod Y = modulus (หารเอาเศษ)
📙 Relational Operator
- X=:=Y คือ equal
- X=\=Y คือ not equal
- X < Y คือ less than
- X > Y คือ greater than
- X =< Y คือ less than or equal to
- X >=Y คือ greater than or equal to
หลังจากที่ทุกท่านได้รู้จัก operator ทางคณิตศาสตร์แล้ว เราลองมาดูวิธีใช้งานกันครับ
จากตัวอย่าง ผมกำหนด facts ชื่อ lives(ชื่อคน, ปีที่เกิด, ปีที่ตาย) เป็นการอธิบายว่าคน ๆ นี้เกิดและตายในปีไหน แล้วผมก็กำหนด rule ขึ้นว่าชื่อ alive(X,Y) โดยจะรับค่า X เป็นชื่อคน และ Y เป็นปี โดย rule นี้จะบอกผลลัพธ์ว่าใครมีชีวิตอยู่ในปีที่เรากำหนดไว้ได้ โดยผมมีการกำหนดเงื่อนไขโดยใช้ relational operator ที่เป็น Y>=A และ Y=<B
เพื่อบอกว่าคนที่มีชีวิตอยู่จะต้องมีชีวิตอยู่ในปีที่เราถามนั่นเอง
ในภาพด้านบน ผมได้ query ว่า alive(X, 1990) หมายความว่า มีใครมีชีวิตอยู่ในปี 1990 บ้าง ผลลัพธ์ก็คือ logan และ mia ซึ่งก็ถูกต้องตาม facts ที่กำหนด
ตัวอย่างโจทย์: การหาความหนาแน่นของประชากร
เราลองมาดูโจทย์ที่ซับซ้อนมากขึ้นนะครับ โดยกำหนด facts 2 ประเภท คือ
- population(X,Y) หมายความว่าในประเทศ X มีจำนวนประชากร Y
- area(X,Y) หมายความว่า ในประเทศ X มีขนาดพื้นที่ Y
จากนั้นกำหนด rule เพื่อหาค่าความหนาแน่นของประชากร โดยแทนเป็น density(X,Y) โดยให้ X = ชื่อประเทศ Y = ค่าความหนาแน่นของประชากรที่เราต้องการหา ซึ่งคำนวณจากการนำจำนวนประชากรของประเทศนั้นมาหารพื้นที่ของประเทศครับ (ค่า population และ area ในโจทย์เป็นการสมมติขึ้น)
เราจะเห็นว่า population(X, Pop) มีการแทนค่าจำนวนประชากรเป็น Pop ได้ด้วย ซึ่ง Pop เป็น variable ตัวหนึ่งครับ เราสามารถแทนค่าเพื่อเก็บค่าจำนวนประชากรไปคำนวณต่อไปใน Y is Pop/Ar ซึ่ง is ใน statement นี้นั้นหมายความว่าให้ Y คือค่า Pop/Ar โดยมีการหารจริง ๆ อย่างเช่น
- ถ้าเราใช้ Y = Pop/Ar จะได้ผลลัพธ์เป็น Y = 80/2
- แต่ถ้าใช้ Y is Pop/Ar จะได้ผลลัพธ์เป็น Y = 40 (หารจริง ๆ นั่นเอง)
หลังจากอ่านบทความนี้แล้ว ทุกท่านสามารถลองกำหนด facts และ rules ขึ้นมาเองเพื่อมาแก้โจทย์ปัญหาได้นะครับ ในบทความต่อไปเราจะมาพูดถึง list กันครับ
📑 แหล่งข้อมูล