최근 수정 시각 : 2025-04-28 17:59:14

Prolog


[[프로그래밍 언어|'''프로그래밍 언어
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 목록 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=royalblue><colcolor=#fff> ※ 나무위키에 등재된 프로그래밍 언어 목록
AActionScript · Ada · Agda · ALGOL · Apex · APL · awk
BBASIC · Befunge · Brainfuck
CC · C# · C++ · Carbon · Chef · Clojure · COBOL · CoffeeScript · Coq · Crystal
DD · Dart
EElixir · Elm · emojicode · Erlang · ETA
FF# · Fennel · Forth · Fortran
GGNU Octave · Go · Groovy · Golfscript
HHaskell · HolyC · HQ9+ · HRON
I
JJava · JavaScript · Julia
KKotlin · Krait
LLean · LISP · Lua
MMalbolge · MATLAB · Max · Mojo · Moonlight
NNim · Nix
OOberon · Objective-C · OCaml · Ook!
PPascal · Perl · PHP · Processing · Prolog · Python
QQ#
RR · Racket · Raku · ReasonML · Ruby · Rust
SScala · Scheme · Scratch · sed · Shakespeare · Shell Script · Smalltalk · Swift
TTypeScript
UUdon
VVisual Basic · Visual Basic .NET · Visual Basic for Applications · vvvv
WWave · Whitespace
X
Y
ZZenScript · Zig
한글누리 · · 씨앗 · 아희 · 약속 · 엄랭 · 엔트리 · 창조}}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 순위 ]
{{{#!wiki style="margin: -5px -1px -10px"
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px -1px"
<tablewidth=100%><tablebgcolor=transparent><colbgcolor=#11a500><colcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 <colbgcolor=#ff1100><colcolor=#fff> 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++ }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ Stack Overflow 2024 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#ffa500><colcolor=#fff> 2024년 Stackoverflow 설문조사 상위 25개 프로그래밍 언어
1 JavaScript <colbgcolor=#ffa500><colcolor=#fff> 14 Rust
2 HTML & CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ TIOBE 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#2777c2><colcolor=#fff> 2025년 4월 TIOBE 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=#2777c2><colcolor=#fff> 11 Fortran
2 C++ 12 Scratch
3 C 13 PHP
4 Java 14 R
5 C# 15 Ada
6 JavaScript 16 MATLAB
7 Go 17 Assembly language
8 Visual Basic 18 Rust
9 Delphi / Object Pascal 19 Perl
10 SQL 20 COBOL }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ PYPL 2025 ]
{{{#!wiki style="margin: -5px -1px -10px"
<colbgcolor=green><colcolor=#fff> 2025년 5월 PYPL 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=green><colcolor=#fff> 11 Swift
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C/C++ 14 MATLAB
5 C# 15 Ada
6 R 16 Ruby
7 PHP 17 Dart
8 Rust 18 Lua
9 TypeScript 19 VBA
10 Objective-C 20 PowerShell }}}}}}}}}}}} }}}}}}}}}}}}
분류:프로그래밍 언어 · 프로그래밍 언어 목록 · 언어별 예제 · 틀:프로그래밍 언어 문법

?- write('Hello, World!').

1. 개요2. 설치3. 상세4. 예제5. 특징6. 여담7. 관련 문서8. 외부 링크

1. 개요

프롤로그(Prolog)는 논리 프로그래밍을 의미하는 프랑스어 programmation en logique의 준말이며 1973년 프랑스 마르세유대학교의 알랭 콜메르(Alan Colmerauer)가 개발한 논리형 프로그래밍 언어다. 논리식을 토대로 오브젝트와 오브젝트 간의 관계에 관한 문제를 해결하기 위해 사용한다.

프롤로그는 아래와 같은 특징을 가지고 있다.[1]
  • 프롤로그는 선언적 언어이다.
  • 프롤로그 프로그램은 사실과 관계로 구성된다.
  • 프롤로그는 통합을 기반으로 한다.
  • 프롤로그는 '논리로 프로그래밍하기'이다.

2. 설치

macOS에서는 아래와 같이 프롤로그 구현체 중 하나인 SWI-Prolog를 설치할 수 있다.[2]
brew install swi-prolog
설치 후에는 swipl이라고 입력하면 SWI-Prolog가 실행된다.

반면에 대다수의 Linux 배포판 환경에서는 GNU가 배포하는 gprolog를 사용할 수 있다. 스펙상 gprolog 고유 predicate나 확장 문법이 많으니 코드 작성 시 호환성에 유의해야 한다.

3. 상세

프롤로그에서는 술어 논리식을 프로그램, 증명하는 것을 계산하는 것으로 간주하는 관점에서 새로운 계산의 기술 형태를 취하고 있다. 즉, 사실(Fact)과 규칙(Rule)들을 제공하여 데이터베이스를 만들고, 이 데이터베이스에 질의를 함으로써 프로그램을 수행하게 되는 것. 수학에서 정의를 이용해 문제를 증명한다는 식으로 생각하면 쉽다. 추론 기구를 간결하게 표현할 수 있기 때문에 인공지능이나 계산 언어학 분야, 자연어 처리 분야 등에서 많이 사용된다.

4. 예제

아래와 같은 내용을 파일명 father.pl로 저장한다.
father(uranus, cronus).
mother(gaea, cronus).
father(cronus, zeus).
parent(X, Y) :- father(X, Y) ; mother(X, Y).
grandparent(X, Y) :- parent(X, Z), parent(Z, Y).
터미널에서 swipl이라고 입력하면 아래와 같은 프롬프트가 나타난다.
Welcome to SWI-Prolog (threaded, 64 bits, version 9.2.7)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?-
?-은 프롬프트이다. 이후 예제에서 프롬프트를 입력할 필요는 없다. 다음과 같이 consult 명령어로 저장한 파일 father.pl을 불러온다.
?- consult('father.pl').
아래와 같이 프로그램에게 제우스의 조부모가 누군지 질문한다.
?- grandparent(Who, zeus).
대답이 한 줄에 한 명씩 나오는데 이때 ;를 누를 때마다 다음 대답이 나온다.
?- grandparent(Who, zeus).
Who = uranus ;
Who = gaea ;
false.

?-

5. 특징

순수 논리형 언어 특성상 사용 도메인이 메우 제한적이다. 대부분의 경우 쿼리(질의), 각종 최적화, 스케줄링, 유한 그래프 순회/채색 문제 등 용도로 사용된다. 흔히 알려진 것과는 달리 인공지능 용도로는 전혀 쓸모가 없다. LISP와 마찬가지로 초창기 전문가 시스템의 모델링이나 NLP 등에 일부 쓰였으나 통계 기반 딥러닝이 대세가 된 이후 사실상 사장되었다. 그나마 게임 개발 등 분야에서 스스로 행동하는 캐릭터 등 유사 인공지능 로직에 쓰인다곤 하나 현실적으로 이런 건 FSM 그래프로 구성하지 딱히 프롤로그 컴파일러를 내장하지는 않는다.

구현상 SAT problem 쿼리 시 결정 트리를 깊이 우선 탐색하기 때문에 문제가 아주 크다면 스택 오버플로우가 일어날 수 있다. gprolog에서는 fd_domain 등 각종 내장 constraints로 도메인 공간을 줄여야 하며, 경우에 따라 수동으로 꼬리 재귀 최적화를 해줘야 한다.

6. 여담

  • 2008년에 한국외국어대학교 출판부에서 펴낸 "언어정보처리를 위한 PROLOG"라는 책이 있다.
  • SWI-Prolog라는 구현체가 있다.

7. 관련 문서

8. 외부 링크


[1] 언어정보처리를 위한 PROLOG, 4쪽~5쪽.[2] https://stackoverflow.com/questions/21597880/running-prolog-on-a-mac