은 다음 일반적으로 변수는 기본적으로 무한 경계를 취득, 기본 제약 조건에 사용했을 때
?- lib(ic).
Yes (0.13s cpu)
?- sum([X,Y,Z]) #= 0.
X = X{-1.0Inf .. 1.0Inf}
Y = Y{-1.0Inf .. 1.0Inf}
Z = Z{-1.0Inf .. 1.0Inf}
There is 1 delayed goal.
Yes (0.00s cpu)
그러나, 글로벌 제약 구현의 일부의 알고리즘 무한 경계를 처리 할 수 없습니다, 따라서 기본 경계를 부과 당신이 언급 :
?- ic_global:ordered_sum([X,Y,Z], 0).
X = X{-10000000 .. 0}
Y = Y{-5000000 .. 5000000}
Z = Z{0 .. 10000000}
There are 5 delayed goals.
Yes (0.06s cpu)
이러한 문제가 발생하지 않도록하려면 더 큰 유한 경계 을 가진 변수를 초기화 할 수 있습니다 전에 전역 제약 호출 : 숫자 임의로 클 수있다 (그 CLP (FD) 라이브러리 포함) 등 SWI-프롤로그와 같은 다른 시스템에서 잘
?- [X,Y,Z] :: -1000000000000000..1000000000000000, ic_global:ordered_sum([X,Y,Z], 0).
X = X{-1000000000000000 .. 0}
Y = Y{-500000000000000 .. 500000000000000}
Z = Z{0 .. 1000000000000000}
There are 5 delayed goals.
Yes (0.00s cpu)
을 – Fatalize
@Fatalize (... 당신은 물론 충분한 메모리가 가정) :'X #> = 0'과 같은 표현식은'X '위의 * 모든 숫자를 포함합니다. – false