본문 바로가기
공부/프로그래밍 언어론

[프로그래밍 언어론 과제] 7. Prolog 로 팩토리얼 구현

by 맑은청이 2021. 5. 21.
728x90
반응형

Prolog란? 

Prolog는 1973년 개발된 논리지향적 언어다. 특히 술어논리(Predicate Logic)에 기반을두고 있다. 인공지능 언어의 초기인 LISP 보다는 규모가 작아서 더 다양한 종류의 컴퓨터에서 실행 가능하다.

 

Prolog 문법 

1) Atom(상수) 

- 자바에서의 String과 의미가 유사

- 항상 소문자로 시작 

- 문자, 숫자, 언더바, ' 로 구성된 데이터 

예시) dog, 'hi', chung_god

 

2) Number(상수)

- 숫자 의미

예시) 1, 100, 56, 12.5, -23

 

3) Variable(변수) 

- 단어에 뜻대로 변수를 뜻하고 대문자로 시작

예시) A, B, C

 

과제 목적

Prolog 를 통해서 계승 프로그램 순환, 반복 버전 작성 

여기서 순환은 재귀, 반복은 반복문이다.

 

1. 팩토리얼 순환 버전 

간단한 재귀를 통해서 팩토리얼을 정의한다. 

factorial(0,1).
factorial(N,F) :-
    N>0,
    N1 is N-1,
    factorial(N1,F1),
    F is N*F1.

2. 팩토리얼 반복 버전

재귀는 Prolog에서 사용할 수 있는 반복 기법이고 while,for 같은 반복문 형태가 없다. 

하지만 tail 재귀를 통해 이를 유사하게 구현해 낼 수 있다. 

 

factorial_iter(0,1).
factorial_iter(N,F):-
    N>0,
    factorial_iter(N,1,F).
    factorial_iter(1,F,F).

factorial_iter(N,T,F):-
    N>1,
    NT is N*T, M is N-1,
    factorial_iter(M,NT,F).

 

참고자료

https://lispandprolog.wordpress.com/iteration-in-prolog/

 

Iteration in Prolog

Recursion is the only iterative method available in Prolog. However, tail recursion can often be implemented as iteration. The following definition of the factorial function is an `iterative’…

lispandprolog.wordpress.com

https://www.cpp.edu/~jrfisher/www/prolog_tutorial/2_2.html

 

Prolog Tutorial -- 2.2

2.2 Two factorial definitions Two predicate definitions that calculate the factorial function are in file 2_2.pl, which the reader can view by clicking on the 'Code' link at the bottom of this page. The first of these definitions is: factorial(0,1). factor

www.cpp.edu

 

728x90
반응형