2

我不知道如何实现以下目标:

我想计算满足某个条件(其值未知)的次数。

例如,如果我有列表[A1,A2,A3][B1,B2,B3],我如何创建一个列表[R1,R2,R3]Ri如果和1如果不是。Ai=Bi0

这是“程序”的基础。

:- use_module(library(clpfd)).

main(A,B) :-
    length(A,3),
    domain(A,1,3),
    all_different(A),
    length(B,3),
    domain(B,1,3),
    all_different(B),

    append(A,B,L),
    labeling([],L).
4

1 回答 1

1

你应该“具体化”你的条件,发布表格的约束

reify(A,B,C) :- C #<==> A #= B.

变量对之间。maplist/3 这是一个方便的快捷方式

:- use_module(library(clpfd)).

% simulate domain/3 in SWI-prolog
domain(Vs,L,H) :- Vs ins L..H.

reify(A,B,C) :-
    C #<==> A #= B.

main(A,B,C) :-
    length(A,3),
    domain(A,1,3),
    all_different(A),
    length(B,3),
    domain(B,1,3),
    all_different(B),

    maplist(reify, A,B,C),
    labeling([],A),
    labeling([],B).

产量

1 ?- main(A,B,C).
A = B, B = [1, 2, 3],
C = [1, 1, 1] ;
A = [1, 2, 3],
B = [1, 3, 2],
C = [1, 0, 0] ;
A = [1, 2, 3],
B = [2, 1, 3],
C = [0, 0, 1] 
etc ....
于 2013-12-16T20:52:44.420 回答