2013-12-11 3 views
2

내 질문에가 있기 때문에이 질문의 제공 끝에 목록 3/사이 Can you write between/3 in pure prolog?프롤로그 :

/3와 세 번째 인수 사이에 만들 수있을 것입니다 당신이

물어 그래서 만약 목록입니다
between(2,6,X). 

X=[2,3,4,5,6] 

아니라이 좋아 오는

나는 나쁜 영어

미안 .. 내가 아무 생각이 없다, 그래서 나는 프롤로그 초보자 해요 (내 모든 솔루션이 작동하지 않습니다 ..) 이 일을해야 알아낼 수 없습니다 .. 당신의 도움에 대한

감사합니다 :) 스털링과 샤피로에 의해 "프롤로그의 예술"예를 들어, 도서관에 가서 좋은 책을 얻어서

답변

5

시작.

두 가지 방법 : 또한 bagof/3setof/3 살펴 보셔야합니다

?- findall(X, between(2, 6, X), Xs). 
Xs = [2, 3, 4, 5, 6]. 

.

직접적인 방법으로는 numlist/3입니다 (예 : the SWI-Prolog implementation 참조). 인수 검사를 사용하지 않으면 다음과 같이 처리됩니다.

numlist(U, U, List) :- !, 
    List = [U]. 
numlist(L, U, [L|Ns]) :- 
    L2 is L+1, 
    numlist(L2, U, Ns). 

술어를 중단하는 데는 여러 가지 방법이 있습니다.

?- numlist(1,0,L). 

은 종료되지 않습니다. 당신은 numlist/3의 특정 버전에 전달하기 전에 인수를 확인하거나 필요

must_be(integer, L), 
must_be(integer, U), 
L =< U 

이러한 검사는 링크 된 SWI - 프롤로그 구현에서 라이브러리 술어 numlist/3에 통합된다.

+0

감사합니다. 나는 어떻게 작동하는지 지금 생각합니다. – user3090164