프롤로그 강점 약점
프롤로그를 사용하는 것은 논리를 이용해서 프로그래밍하는 것을 의미한다.
프롤로그 프로그래밍은 두 가지 주요한 단계로 이루어져 있다. 우선 지식 베이스, 논리적인 사실의 결합, 문제 도메인에 대한 추론 등을 구축하는 데에서 시작한다.
다음에는 지식 베이스를 컴파일하고, 도메인에 대한 질문을 던진다. 이러한 질문 중에서 어느 것은 단언의 형태를 띠기 도 하는데, 프롤로그는 그런 단언에 대해서 yes 혹은 no라고 대답한다. 어떤 질의들은 내부에 변수를 갖기도 한다.
강점
<자연언어 처리>
자연언어 인식을 위해서 처음으로 사용된 언어가 아마 프롤로그일 것이다. 특히 프롤로그 언어의 모델은 자연언어를 받아들이고, 사실과 추론으로 이루어진 지식 베이스를 적용하고, 그리하여 복잡하고 부정확한 언어를 컴퓨터가 이해할 수 있는 구체적인 규칙으로 표현하는 것을 가능하게 해준다.
<게임>
게임에서 특히 동료나 적군의 동작을 모델링하는 분야는 점점 복잡해지고 있다. 프롤로그 모델은 상대방의 특징과 행위를 주어진 시스템 내부에서 설명할 수 있다. 프롤로그는 여러 종류의 적군 속에 다양한 행위를 집어넣어서 좀 더 생명체 같은 경험과 기쁨을 제공한다.
<시맨틱 웹>
시맨틱 웹은 웹에 존재하는 서비스와 정보에 일정한 의미를 부여해서 사용자의 질의를 더 잘 만족시킬 수 있도록 하려는 노력이다. 자원설명 프레임워크(RDF)는 자원을 설명하는 기본적인 방법을 제공한다. 서버는 이러한 자원을 지식 베이스로 컴파일할 수 있다.
<인공지능>
인공지능(AI)은 컴퓨터 안에 지능을 집어넣으려는 노력이다. 이러한 지능은 다양한 형태를 가질 수 있는데, 대부분의 경우에 어떤 에이전트가 복잡한 규칙을 기초로해서 필요에 따라 행동을 수정하는 것을 포함한다. 프롤로그는 이런 분야에서, 특히 규칙이 구체적이고 어떤 엄밀한 논리에 바탕을 두고 있을 때 탁월하다. 이런 이유 때문에 프롤로그는 때론 논리 프로그래밍 언어라고 불리기도 한다.
<스케줄링>
프롤로그는 제한된 자원들을 대상으로 작업할 때 탁월하다. 운영체제의 스케줄러나 다른 종류의 복잡한 스케줄러를 구현하기 위해서 프롤로그를 이용하는 경우가 많다.
약점
<유틸리티>
프롤로그는 핵심영역에서는 탁원하지만, 틈새시장인 논리 프로그래밍 영역에 너무 집중한다는 측면이 있다. 프롤로그는 범용 목적의 언어가 아니다. 언어의 설계와 관련된 한계도 가지고 있다.
<매우 커다란 데이터 집합>
프롤로그는 결정 트리를 대상으로 주어진 규칙의 집한에 매치하는 모든 가능한 조합을 확인하기 위해서 깊이 우선 검색을 수행한다. 다양한 컴파일러가 이런 절차를 상당한 수준으로 최적화하고 있다. 하지만 이러한 알고리즘은 본질적으로 계산하기가 복잡하고, 특히 데이터의 양이 커지면 계산하기가 어렵다는 한계가 있다. 또한 프롤로그 사용자들이 데이터 집합의 크기를 적당한 수준으로 통제하려면 언어 자체가 동작하는 방식을 제대로 이해해야 한다는 단점도 있다.
<명령형 모델과 선언형 모델의 혼합>
함수형 언어 패밀리에 속하는 많은 언어가, 특히 재귀를 많이 사용하는 언어들이 대부분 그런 것처러므 프롤로그가 재귀적인 규칙을 어떻게 해결하는지에 대해 정확하게 이해해야 한다. 심지어 별로 크지 않은 문제를 해결할 때에도 꼬리 재귀와 관련된 규칙을 정의해야 하는 경우가 일반적이다. 그래서 데이터의 크기가 상대적으로 작은 경우만 제대로 해결할 수 있는, 확장 불가능한 프롤로그 애플리케이션을 만드는 경우가 많다. 만족할 만한 수준으로 확장 가능한 코드는 작성하려면 프롤로그를 어떻게 설계하는 것이 효과적인지에 대해 정확하게 이해해야 한다.