Prolog(Programming in Logic)는 논리 프로그래밍 패러다임의 대표 언어로, 사실(Facts)과 규칙(Rules)을 선언하면 단일화(Unification)와 역추적(Backtracking)을 통해 답을 도출한다.
핵심 개념
prolog
% 사실 (Facts): 참인 명제
부모(홍판서, 홍길동).
부모(홍판서, 홍길순).
남자(홍판서).
남자(홍길동).
여자(홍길순).
% 규칙 (Rules): 조건적 논리
아버지(X, Y) :- 부모(X, Y), 남자(X).
조상(X, Y) :- 부모(X, Y).
조상(X, Y) :- 부모(X, Z), 조상(Z, Y).
% 쿼리 (Query)
?- 아버지(홍판서, X).
% X = 홍길동 ;
% X = 홍길순
?- 조상(홍판서, X).
% X = 홍길동 ;
% X = 홍길순
리스트 처리
prolog
% 리스트 [H|T]: 머리(H)와 꼬리(T)
길이([], 0).
길이([_|T], N) :- 길이(T, N1), N is N1 + 1.
멤버(X, [X|_]).
멤버(X, [_|T]) :- 멤버(X, T).
뒤집기([], []).
뒤집기([H|T], R) :- 뒤집기(T, RT), append(RT, [H], R).
% 퀵정렬
퀵정렬([], []).
퀵정렬([H|T], Sorted) :-
분할(H, T, Less, Greater),
퀵정렬(Less, SortedLess),
퀵정렬(Greater, SortedGreater),
append(SortedLess, [H|SortedGreater], Sorted).
분할(_, [], [], []).
분할(Pivot, [H|T], [H|Less], Greater) :-
H =< Pivot, !,
분할(Pivot, T, Less, Greater).
분할(Pivot, [H|T], Less, [H|Greater]) :-
분할(Pivot, T, Less, Greater).
Prolog vs 다른 패러다임 비교
| 패러다임 | 언어 | 핵심 추상화 | 질문 방식 |
|---|
| 명령형 | C, Java | 어떻게 할까? | 단계 지시 |
| 함수형 | Haskell, F# | 무엇인가? | 값 변환 |
| 논리형 | Prolog | 무엇이 참인가? | 관계 선언 |
| 객체지향 | Python, C++ | 누가 하는가? | 메시지 전달 |
관련 문서