Mpp*_*ppl 2 prolog constraint-programming clpfd
我需要创建一个谓词:
applyConstraints(L)
Run Code Online (Sandbox Code Playgroud)
这对L中的变量应用约束,使得L中没有两个连续元素都是奇数,甚至我怎么能这样做?固定尺寸L很简单,但可变尺寸L呢?我需要使用sicstus-prolog clpfd库来完成.
% SICStus:
applyConstraints([]).
applyConstraints([X|Xs]) :-
X mod 2 #= R,
applyConstraints(Xs, R).
applyConstraints([], _).
applyConstraints([X|Xs], R) :-
X mod 2 #= S,
S #\= R,
applyConstraints(Xs, S).
% Query:
| ?- applyConstraints(L), length(L,2), !, domain(L,-2,2), labeling([],L).
L = [-2,-1] ? ;
L = [-2,1] ? ;
L = [-1,-2] ? ;
L = [-1,0] ? ;
L = [-1,2] ? ;
L = [0,-1] ? ;
L = [0,1] ? ;
L = [1,-2] ? ;
L = [1,0] ? ;
L = [1,2] ? ;
L = [2,-1] ? ;
L = [2,1] ? ;
no
Run Code Online (Sandbox Code Playgroud)