Prolog Constraint编程查找偶数和奇数

Mpp*_*ppl 2 prolog constraint-programming clpfd

我需要创建一个谓词:

applyConstraints(L)
Run Code Online (Sandbox Code Playgroud)

这对L中的变量应用约束,使得L中没有两个连续元素都是奇数,甚至我怎么能这样做?固定尺寸L很简单,但可变尺寸L呢?我需要使用sicstus-prolog clpfd库来完成.

Mat*_*son 5

% 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)