Programming

[SWI-Prolog] FACT와 RULE

hi-choi 2020. 11. 22. 22:05

SWI-Prolog란?


SWI-Prolog는 Knowledge Base System(지식 기반 시스템)입니다. 논리형 언어로 학습되어 있는 FACT와 RULE을 기반으로 추론해 사용자의 질문(ASK)에 답을 출력합니다.


SWI-Prolog 규칙


SWI-Prolog는 Fact와 Rule로 이루어져 있습니다. Fact는 대상의 특징과 대상의 관계를 정의합니다. Rule은 Fact의 관계에 대한 정보를 담고 있습니다. 개발자는 SWI-Prolog가 사용자의 질문에 답을 하기 전에 먼저 SWI-Prolog에 Fact와 Rule을 학습시켜주어야 합니다.

 

 

FACT 정의 방법

FACT는 대상의 특징을 정의하는 경우에는 B(A)의 형태로 작성하시면 됩니다. 여기서 A는 주어를 의미하며 B는 목적어나 동사를 의미합니다. 대상 사이의 관계를 정의하는 경우는 B(A,C) 형태로 작성하시면 됩니다. 여기서 A는 주어, C는 목적어, B는 동사를 의미합니다. FACT를 정의할 때는 순서가 매우 중요하기 때문에 바꾸시면 안됩니다. 순서는 영어 문법을 기준으로 생각하시면 이해하기 쉬우실 겁니다.

 

EXAMPLE SWI-Prolog FACT 의미
1 sad(jain). Jain is sad.
2 person(jain). Jain is a person.
3 instrument(piano). Piano is an instrument.
4 playing(jain, piano). Jain plays the piano.

 

또, FACT 정의 시 주의해야 할 점은 소문자를 사용해야한다는 점입니다. 대문자는 변수를 정의할 때 사용되기 때문에 소문자를 사용해 FACT를 정의해주셔야 합니다. 그리고 문장이 끝날 때마다 끝에 .을 붙여야 합니다.

 

 

실행 모습

 

 

RULE 정의 방법

RULE은 FACT 사이의 관계를 정의할 때 사용합니다. RULE은 보통 C:-A;B 혹은 C:-A,B 형태로 작성합니다. 전자의 경우 ;가 or을 의미하기 때문에 A와 B 둘 중 하나가 TRUE이면 C가 성립합니다. 후자의 경우 ,가 and를 의미하기 때문에 A와 B 두 개가 모두 TRUE일 경우에만 C도 성립합니다. 여기서 A와 B는 FACT에서 정의된 내용이고 C는 A와 B의 관계를 바탕으로 새로 정의된 RULE 입니다.

 

EXAMPLE SWI-Prolog 의미
FACT 1 sad(jain). Jain is sad.
2 sad(eric). Eric is sad.
3 cry(jain). Jain cries.
RULE 4 sing(jain):-sad(jain);cry(jain). When Jain is sad or Jain cries, Jain sings.
5 sing(eric):-sad(eric);cry(eric). When Eric is sad or Jain cries, Eric sings.
6 eat(jain):-sad(jain),cry(jain). When Jain is sad and Jain cries, Jain eats.
7 eat(eric):-sad(eric),cry(eric). When Eric is sad and Eric cries, Eric eats.

 

실행 모습