에 대한 모든 가능성주고 받기 : 경우프롤로그 내가 프롤로그에서 무력이 같은 모든 가능한 계산을 얻을 수 있는지 궁금 해서요 산술
6 is Z + Q
Z = 1 Q = 5
Z = 2 Q = 4
Z = 3 Q = 3
에 대한 모든 가능성주고 받기 : 경우프롤로그 내가 프롤로그에서 무력이 같은 모든 가능한 계산을 얻을 수 있는지 궁금 해서요 산술
6 is Z + Q
Z = 1 Q = 5
Z = 2 Q = 4
Z = 3 Q = 3
생성 및 테스트 접근법도 작동합니다. 물론, 당신은 여전히 예를 들어, 몇 가지 제약 조건이 필요합니다
?- between(1, 6, X), % X is an integer between 1 and 6
between(1, 6, Y), % Y is an integer between 1 and 6
X =< Y, % X is not larger than Y
X + Y =:= 6. % the sum is 6
X = 1, Y = 5 ;
X = 2, Y = 4 ;
X = Y, Y = 3 ;
false.
하위 쿼리의 순서는 중요하다, 당신은뿐만 아니라 생성 - 다음 테스트를 호출 할 수 있도록.
?- between(1, 6, X), % X is an integer between 1 and 6
between(X, 6, Y), % Y is an integer between X and 6
X + Y =:= 6. % the sum is 6
X = 1, Y = 5 ;
X = 2, Y = 4 ;
X = Y, Y = 3 ;
false.
당신이 아래로가는 것을 깨달아야한다 : 당신은 제약의 일부 하드 코드를 두려워하지 않는 경우, 예를 들어 값의 일부를 발생하지 않도록하고, 시험의 일부가 불필요한 만들 수있는 방법이있을 수 있습니다 그 도로는 CLP (FD)와 같은 구속 조건 해석기를 구현하는 것과 거의 같습니다.
내가 사용하는 것이 좋습니다 당신의 프롤로그 그것을 지원, 유한 도메인 솔버.
내가 보통 GProlog를 사용하고 난 당신이 제약 조건을 설정fd_domain/3
이 (
1
에서
100
에) 변수에 대한 도메인
A
및
B
을 설정
fd_domain([A, B], 1, 100),
6 #= A + B,
fd_labeling([A, B]),
, 6 #= A + B
같은 뭔가 물어 무엇을 얻을 수 있습니다 (A + B
6
입니다 ) 및 fd_labelling/1
모든 가능성 계산을 얻습니다.
Swi-Prolog에서 조금 다릅니다. 모든
첫째, 당신은, 당신은 제약 조건 설정
Vars = [A, B],
Vars ins 1..100,
을 쓸 수있는 변수와 도메인을 설정하려면
:- use_module(library(clpfd)).
와 CLP (FD) 라이브러리를로드 할 필요는 동일
6 #= A + B,
가능한 모든 조합을 얻으려면
label(Vars),