Prolog - 프로그래밍언어

2008. 9. 19. 02:23Study/Programming


Prolog

Plolog는 논리 프로그램 언어로써, 그 명칭은 Programmation en lodique에서 따온 것이다. 1972년에 프랑스의 Marseille 대학에서 Alain Colmerauer가 발명하였다. 컴퓨터상에서 독특한 명령어를 사용하는 것 대신에 인간이 사용하는 논리적 표현을 가능하게 한 프로그램 언어를 만들려는 시도에 의한 것이다.

Prolog는 많은 인공지능(Artificial Intelliengce) 프로그램과 전산언어학(Computational Linguistics)에서 사용된다. 문법과 의미(Syntax and semantics)는 매우 단순하고 명확하다. Prolog를 현대적인 모습으로 이끈 많은 연구는, 5세대컴퓨터 프로젝트에서 그 운영체제를 위한 핵심언어(Kernel language)로서 다양한 Prolog를 선택하였던 것의 파급효과였다.

Plolog는 술어논리에 기반한 것이다. 그러나 Prolog 는 단지 Horn 절 (Horn clause) 만을 허용하는 제한이 있다. Prolog 프로그램의 실행은 first-order resolution 에 의한 정리증명 (Theorem Proving) 을 효율적으로 응용한 것이다. 기본적인 개념들은 단일화 (Unification), tail recursion, 역추적 (backtracking) 이다.

Prolog 는 Programming in Logic의 약자로 1971년에 프랑스의 Marseille(마르세이유) 대학에서 Alain Colmerauer 와 Phillipe Roussel 에 의해 고안되어 1972년에 ALGOL-W 로 최초로 구현되었다. 원래는 자연어 처리를 위해서 설계되었지만 AI를 위해 가장 널리 사용되는 언어중 하나가 되었다. 술어논리(predicate logic)로 명제를 표현하고, 논리연산 기능을 겸비한 언어이다. Lisp 과 같이 Prolog는 심볼 처리용으로 만들어지고, 리스트 처리는 매우 효율적이다. Prolog의 큰 장점은, 입력문을 절 형식으로 나타내고 연역추론을 한다. 패턴 매칭을 입력문의 차례대로 함으로써 도출(resolution)의 전략을 사용자에게 맡겨서 시스템의 복잡성이 해소되고, 속도가 향상된다. 병렬탐색에 적합하게 설계되어 있기 때문에 병렬처리가 주요 요소가 될 미래의 컴퓨터에 적합한 언어로 여겨지고 있다.

Prolog 소스코드의 예

/* 미분 정의 */

d(X,X,1) :- !. /* d x dx = 1 */

d(C,X,0) :- atomic(C). /* d c dx = 0 */

d(-U,X,-A) :- d(U,X,A). /* d -u dx = - d u dx */

d(U+V,X,A+B) :- d(U,X,A), d(V,X,B). /* d u+v dx = d u dx + d v dx */

d(U-V,X,A-B) :- d(U,X,A), d(V,X,B). /* d u-v dx = d u dx - d v dx */

d(C*U,X,C*A) :- atomic(C), C \= X, d(U,X,A), !. /* d c*u dx = c*d u dx */

d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B). /* d u*v dx = u*d v dx + v*d u dx */

d(U/V,X,A) :- d(U*V^(-1),X,A). /* d u/v dx = d (u*v)^-1 dx */

d(U^C,X,C*U^(C-1)*W) :- atomic(C), C \= X, d(U,X,W). /* d u^c dx = c*u^(c-1)*d u dx */

d(log(U),X,A*U^(-1)) :- d(U,X,A). /* d ln(u) dx = u^-1 * d u dx */