Table of Contents
• 시작하기 전에
• 개발 환경 설정
• 프롤로그 소개
• 프롤로그 튜토리얼 with Demo
• 예제 : 아인슈타인 퍼즐 풀이
3.
시작하기 전에
• 프롤로그의아주아주 기본 문법만 다룹니다.
– 여기서 다루는건 극히~~~ 일부분
– C 로 치면, 대입문(=), 제어문(if), 반복문(for) 이정도
– 실제로는 훨씬 많은 피쳐들이 있고 할 수 있는 일도 많음
4.
개발 환경 설정
•SWI Prolog for Windows
– http://www.swi-prolog.org
– 설치가 간단하다.
• 다양한 구현이 있다
– http://en.wikipedia.org/wiki/Comparison_of_Prolog_implementatio
ns
5.
프롤로그 소개
• prologue?
– 아니다! Prolog. Programming in Logic 의 약자
• 범용 언어
– 기본적으로 Prolog 는 어떤 알고리즘도 구현할 수 있는 범용 언어
– 여러가지 패러다임을 지원한다
• 하지만
– Symbolic Programming
– Declarative Programming
– Logic Programming
에 다른 언어보다 더 적합하다.
6.
프롤로그 소개
• SymbolicProgramming
– vs. Numeric Computation
– 수치연산을 못하는 건 아니지만 취약한 것은 사실. 언어적 지원이 거의 없다
– 심볼 연산 관련 구현에서 다른 언어라면 알아보기 힘든 수십 페이지의 코드
가 프롤로그에서는 깔끔한 몇 페이지의 코드로 표현된다
• Declarative Programming
– vs. Procedural Programming
– 대부분의 절차적 언어와는 달리 프롤로그는 선언적 패러다임으로, 같은 문
제에 대해 다른 문제 해결 방법을 강제하기 때문에, 프로그래밍 언어를 처
음 시작할 때 같이 배우면 생각의 폭을 넓힐 수 있다
• Logic Programming
– vs. Functional Programming
– 말 그대로, 논리를 프로그래밍 언어로 표현한다
7.
프롤로그 튜토리얼
• 오른쪽과같은 가계도가 주어졌을 때,
pam tom
• 다음 질문에 대한 답을 출력하는
프로그램을 작성해 보자
– bob 의 부모는?
– pat 의 조부모는? bob liz
– ... 의 여자형제는?
– ... 의 자녀는?
– ... 의 손자는? ann pat
– ... 의 선조는?
– ... 의 후손은?
jim
8.
프롤로그 튜토리얼
• 소스코드#1
parent(pam,bob). % pam is parent of bob. pam tom
parent(tom,bob).
parent(tom,liz).
parent(bob,ann). bob liz
parent(bob,pat).
parent(pat,jim).
ann pat
• 질문?
?- parent(bob,pat).
?- parent(liz,pat). jim
?- parent(tom,ben).
?- parent(X,liz).
9.
프롤로그 기본 문법
•clause
– 마침표로 끝난다.
– parent(pam,bob). % parent 를 relation 이라고 한다.
• atom
– 소문자로 시작
– parent, pam, bob
• variable
– 대문자로 시작
– X, Y
• goals
– 시스템에 질의
– 이미 입력된 clause 를 사용하여 goal을 만족하는 답을 찾는다.
10.
프롤로그 튜토리얼
• 소스코드#2
– female(pam). % pam is female. pam tom
– male(tom).
– male(bob).
– female(liz). bob liz
– female(ann).
– female(pat).
– male(jim). ann pat
– offstring(X,Y) :- parent(Y,X).
% If Y is parent of X, X is offspring of Y.
jim
11.
프롤로그 기본 문법
•rule
– offspring(X,Y) :- parent(Y,X).
– 'head' :- 'body'.
– P :- Q, R. % If Q and R then P.
– P :- Q; R. % If Q or R, then P.
12.
프롤로그 튜토리얼
• 소스코드#3
– mother(X,Y) :- pam tom
parent(X,Y), female(X).
– grandparent(X,Z) :-
parent(X,Y), parent(Y,Z). bob liz
– sister(X,Y) :-
parent(Z,X),
parent(Z,Y), ann pat
female(X).
jim
프롤로그 기본 문법
•List
– [ ]
– [ A ] = .( A, [] )
– [ A, B, C ] = .( A, .( B, .( C, [] ) ) )
– [ Head | Tail ]
– [ A, B, C ] = [ A | [ B, C ] ] = [ A, B | [C] ]
15.
아인슈타인 퍼즐
• Facts
– 5채의 모두 다른 색깔의 집이 있다
– 각 집에는 다른 국적의 사람이 산다
– 각 집주인들른 다른 음료수를 마시고, 다른 담배을 피며, 다른 애완동물을
기른다
• Details
– 영국인은 빨간 집에 산다
– 스웨덴인은 개를 기른다
– 덴마크인은 홍차를 마신다
– 녹색집은 흰색집 바로 왼쪽에 있다
– 녹색집 사람은 커피를 마신다
– 폴몰 담배를 피는 사람은 새를 기른다
– 노란색집 사람은 던힐 담배를 피운다
16.
아인슈타인 퍼즐
• Details
– 한가운데 사는 사람은 우유를 마신다
– 노르웨이인은 첫번째 집에 산다
– 블렌드 담배를 피우는 사람은 고양이를 기르는 사람 옆집에 산다
– 말을 기르는 사람은 던힐 담배를 피우는 사람 옆집에 산다
– 블루마스터 담배를 피우는 사람은 맥주를 마신다
– 독일인은 프린스 담배를 피운다
– 노르웨이인은 파란색집 옆집에 산다
– 블렌드 담배를 피우는 사람은 물은 마시는 사람 옆집에 산다
• 문제. 금붕어를 기르는 사람은 누구일까?
– 덜덜덜...
17.
아인슈타인 퍼즐
• 데이터표현
– house( Color, Nationality, Beverage, Cigarette, Pet ).
– [ House1, House2, ... , House5 ]
• Relation
– member( Item, [ Item | _ ] ).
– member( Item, [ _ | Rest ] ) :- member( Item, Rest).
– order( A, B, [ A, B | _ ] ).
– order( A, B, [ _ | Tail ] ) :- order( A, B, Tail ).
– near( A, B, List ) :- order( A, B, List) ; order( B, A, List ).