[Prolog] Arithmetic and Relational Operators สัญลักษณ์ทางคณิตศาสตร์พื้นฐานใน Prolog

Neverrest
Neverrest
2 min readFeb 12, 2021

--

📘 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 ทางคณิตศาสตร์แล้ว เราลองมาดูวิธีใช้งานกันครับ

Who is alive in 1990?
Who is alive in 1990?

จากตัวอย่าง ผมกำหนด facts ชื่อ lives(ชื่อคน, ปีที่เกิด, ปีที่ตาย) เป็นการอธิบายว่าคน ๆ นี้เกิดและตายในปีไหน แล้วผมก็กำหนด rule ขึ้นว่าชื่อ alive(X,Y) โดยจะรับค่า X เป็นชื่อคน และ Y เป็นปี โดย rule นี้จะบอกผลลัพธ์ว่าใครมีชีวิตอยู่ในปีที่เรากำหนดไว้ได้ โดยผมมีการกำหนดเงื่อนไขโดยใช้ relational operator ที่เป็น Y>=A และ Y=<B เพื่อบอกว่าคนที่มีชีวิตอยู่จะต้องมีชีวิตอยู่ในปีที่เราถามนั่นเอง

ในภาพด้านบน ผมได้ query ว่า alive(X, 1990) หมายความว่า มีใครมีชีวิตอยู่ในปี 1990 บ้าง ผลลัพธ์ก็คือ logan และ mia ซึ่งก็ถูกต้องตาม facts ที่กำหนด

ตัวอย่างโจทย์: การหาความหนาแน่นของประชากร

Find density of population in a country.
Find density of population in a country.

เราลองมาดูโจทย์ที่ซับซ้อนมากขึ้นนะครับ โดยกำหนด 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 กันครับ

📑 แหล่งข้อมูล

--

--

Neverrest
Neverrest

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