2014-07-12 1 views
3

내가 다음 CLP (FD) 쿼리가 : SWI - 프롤로그에서짧은 시간에이 CLP (FD) 쿼리를 종료 할 수 있습니까?

?- use_module(library(clpfd)). 
?- [I,N,M,J] ins -2147483648..2147483647, 
I - 3*N #= X, X in 1..2, 
I - 5*M #= Y, Y in 1..4, 
I - 15*J #= 0. 

라벨/1 목표없이 쿼리를 포즈 이미 인터프리터는 실질적으로 중단됩니다. 나는 짧은 시간에 을 종료 할 것으로는 생각하지 않는다.

쿼리, 일부 재정렬 등을 어떻게 수정할 수 있습니까? 예상 답변을 "false"로 제공합니까?

바이

P.S : 일부 잠시 후^C를 누른 후 t, I는 CLP (FD) 시스템이 여전히 비지 인 것을 알 수있다.

+0

인터프리터에서 'false'가 예상됩니다. – eazar001

+0

개행을 사용하여 검색어를 입력했을 때 다음과 같이 검색어를 복사하여 붙여 넣을 수 있습니다 :'[I, N, M, J] ins -2147483648..2147483647, 3 * N # = X, X in 1..2, I - 5 * M # = Y, Y in 1..4, I - 15 * J # = 0. – eazar001

+1

개행은 문제가되지 않으며 SWI-Prolog는 개행과 함께 실행되거나 개행되지 않고 개행에 민감하지 않습니다. 프롤로그에서 검색어를 끝내는 것은 공백 또는 개행 문자가있는 마침표 (.)입니다. –

답변

4

아주 쉽게 :

첫째, J*15에 의해 I 교체; 상기와

?- 15*J - 3*N #= X, X in 1..2, 
    15*J - 5*M #= Y, Y in 1..4, 
    I #= 15*J, 
    [I,N,M,J] ins -2147483648..2147483647. 
false. 

요인이 항상 감지되지 않으며, 쉽게 도메인의 표현을 날려 버릴 수 있기 때문에 전파 등은 약한 : 마지막 큰 도메인을 넣어.

+1

잘 했어. 흥미 롭 군. 조사가 필요했습니다. –