블로그 이미지
올해목표 // 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
 
11-05 05:27
 

달력

« » 2024.11
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 30
 

최근에 올라온 글

최근에 달린 댓글


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

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 자수씨
, |

인공지능 수업시간에 Prolog 라는 언어를 배웠습니다.

대충 어떤 식으로 돌아가는 것에 대해서는 알겠지만 처음 다뤄보는 언어라서 버벅거리다가 이제야 이해를 하고 정리 들어갑니다.


위키피디아에서는 Prolog 를 다음과 같이 설명합니다.
Prolog is a logic programming language. It is a general purpose language often associated with artificial intelligence and computational linguistics. It has a purely logical subset, called "pure Prolog", as well as a number of extralogical features.
[출처] 위키피디아 - Prolog  http://en.wikipedia.org/wiki/Prolog

논리 프로그래밍 언어로 인공지능과 컴퓨터언어학과 연관이 있다고 하네요... (험험... 짧은 영어 실력이...)



실제로 Prolog 로 프로그래밍을 할 수 있도록 개발 툴을 다운로드 받습니다.
SWI-Prolog's home : http://www.swi-prolog.org/

좌측에 있는 Download 메뉴를 클릭합니다.



Stable release 를 선택합니다. (안정적으로 릴리즈 된 것을 사용해야겠죠~)



저는 Window XP 를 쓰기 때문에 아래의 링크로 설치파일을 받았습니다.



설치하는데에는 무리가 없을 것 같으므로 스킵하고 설치된 SWI-Prolog 를 실행하면 아래와 같은 화면이 나오게 됩니다.



그냥 SWI-Prolog 만 써도 프로그래밍은 가능하지만 조금 불편한 점이 많습니다.
그래서 Prolog 관련 IDE 를 다운로드 받습니다.
SWI-Prolog-Editor Download Page : http://lernen.bildung.hessen.de/informatik/swiprolog/indexe.htm

다운로드 페이지로 이동하여 아래의 링크를 클릭합니다. setup.zip 의 압축을 풀어서 설치를 합니다.



설치를 완료하면 아래와 같은 바로가기가 생기게 됩니다. 실행을 해봐야겠죠?



pl 파일이 위쪽에 있고 아래쪽에는 실행을 시켜볼 수 있는 인터프리터(?) 가  아래쪽에 있습니다.



간단하게 Prolog 프로그래밍을 작성하고 F9 를 누르면 (처음 누르게 되면 파일 저장경로를 묻습니다.)
컴파일이 되고 아래쪽에서 명령을 실행하여 확인을 해볼 수 있습니다.



역시 IDE 가 있으니 좀 할만하네요~ ㅋㅋㅋ



Posted by 자수씨
, |

인공지능 시간에 팀 과제 였던 A* 알고리즘...

priority queue 의 비중이 크기에 c 와 MFC 로 개발하였을 때 Java 대한 그리움을 떨치지 못하고

자바로 다시 짰습니다.

아... 이제 저는 너무나도 자바에 익숙해져 버렸나 봅니다;;; 웁쯔;;;

5년전에는 MFC 신동이였는데 크흑...





Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백