2011-11-28 2 views
5

코드 다음 0 내가 인터프리터에 ;을 넣을 때마다 이상의 모든 정수를 더 제공하는 프롤로그 코드, 그것은 다음 수 있습니다 : 그것은 0과 사이의 숫자를 제공하는 방법이 있나요Prolog에서 1에서 100까지의 숫자를 인쇄하는 방법?

is_integer(0). 
is_integer(X) :- is_integer(Y),X is Y+1. 

을 100 만. 100에 도달하면 멈춰야합니다.

답변

2

얼마나 좋은 퀴즈. Prolog가 정의한 최소한의 도구를 사용하여 재귀를 제어하는 ​​것이 얼마나 어려운지를 잘 보여줍니다. 우리는 otherless 바운드 됨 제한, 기준값보다 낮은 값으로 우리의 해결책을 저지한다 : 여기

is_integer(0). 
is_integer(X) :- 
    is_integer(Y), 
    (Y >= 100, ! ; X is Y + 1). 

의 범위를 제한하는 트레이스 출력을 3 (즉 ... Y >= 3, ! ; ...)

?- is_integer(X). 
X = 0 ; 
X = 1 ; 
X = 2 ; 
X = 3 ; 
true. 
5

B, Ciao, SICStus (라이브러리), SWI, YAP, XSB (라이브러리)에 이러한 목적으로 기본 제공 술어 between/3이 있습니다.

?- between(0,100,X). 
X = 0 ; 
X = 1 ; 
... 
X = 100. 

당신이 프롤로그를 배우기 시작하면

, 더 잘 이해하고 추론하는 것이 훨씬 쉽다 첫 s(X) 번호를 사용하려고합니다. 같은 예는, 만 3까지가는 :

?- nat_nat_sum(N,_,s(s(s(0)))). 

를 정의와 함께 :

nat_nat_sum(0,I,I). 
nat_nat_sum(s(I),J,s(K)) :- 
    nat_nat_sum(I,J,K). 
관련 문제