블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
02-28 23:17
 

달력

« » 2024.2
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29
 

최근에 올라온 글

최근에 달린 댓글

'SWI-Prolog-Editor'에 해당되는 글 1건

  1. 2009.04.03 [AI] Prolog 를 파헤쳐 봅시닷!?!? - 2. Prolog 문법은? 4

이제 실행해볼 환경도 마련했으니 간단하게 프로그램을 작성해 보겠습니다.

1:  father(paul, tom).   father(alex, tom).
2:  mother(paul, alice). mother(alex, alice).
3:
4:  parent(Person, Parent) :-
5:    father(Person, Parent);
6:    mother(Person, Parent).
7:  
8:  sibling(Person, Sibling) :-
9:    Person \== Sibling,
10:   father(Person, Father), father(Sibling, Father),
11:   mother(Person, Mother), mother(Sibling, Mother).


1~2 라인에서는 facts 를 정의하였습니다.
1:  father(paul, tom).   father(alex, tom).   % paul 의 아버지는 tom, alex 의 아버지는 tom.
2:  mother(paul, alice). mother(alex, alice). % paul 의 어머니는 alice, alex 의 어머니는 alice.

4~6 라인에서는 부모 - parent/2 라는 룰을 정의하였습니다.
('/' 뒤에 숫자는 인자의 개수를 말합니다. 여기서는 parent 의 rule 의 인자는 2개라는 뜻)
4:  parent(Person, Parent) :-
5:    father(Person, Parent);
6:    mother(Person, Parent).
':-' 라는 연산자는 rule 을 정의할 때 사용하며 세미콜론(;) 은 or 연산을 의미합니다.
위의 내용은 parent/2 라는 룰은 father/2 나 mother/2 의 facts 를 확인한다는 뜻 입니다.

8 ~ 11 라인은 형제 - sibling/2 라는 룰을 정의하였습니다.
8:  sibling(Person, Sibling) :-
9:    Person \== Sibling,
10:   father(Person, Father), father(Sibling, Father),
11:   mother(Person, Mother), mother(Sibling, Mother).
형제를 확인할 경우 본인이 아닌 것을 확인해야 하므로 9 라인의 '\==' 연산자를 통하여 같지 않음을 확인합니다.
콤마(,)의 경우에는 and 연산을 의미합니다.
위의 내용은 인자들이 서로 같지 않고 아버지와 어머니가 같은 경우의 Person 과 Sibling 을 확인할 수 있는 rule 입니다.



이제 맞게 프로그래밍이 되었는지 질의를 해보겠습니다.
?- parent(paul, WHO).
WHO = tom ;
WHO = alice.
paul 의 parent 를 확인하는 질의입니다. 명령을 실행하면 WHO = tom 이라는 결과가 나오는데 Enter 를 치게 되면
다음 대상에 대한 출력을 하게됩니다.

sibling(paul, alex). sibling(paul, paul). 과 같은 질의를 해보면 올바르게(?) 프로그래밍이 된 것을 확인할 수 있을 것입니다.


Prolog 작성시 주의사항
facts
작성시 인자의 첫 글자는 소문자로 작성을 합니다. 첫 글자가 대문자일 경우 Singleton variable 로 인식을 하게됩니다.
rules 작성시에 rules 의 이름의 첫글자는 소문자로 작성하며, 인자의 첫글자는 대문자로 작성합니다.
(해보시면 알겠지만 이름의 첫글자를 대문자로 하게되면 컴파일 오류가 나며, 인자를 소문자로 할 경우 올바른 결과를 확인할 수 없습니다.)




이정도만 알면 간단한 Prolog 프로그래밍을 할 수 있겠죠???



Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백