Prolog计数有限制

时间:2013-12-16 20:13:32

标签: prolog sicstus-prolog clpfd

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

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

例如,如果我有列表[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). 。{/ p>

这是“程序”的基础。

{{1}}

1 个答案:

答案 0 :(得分: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 ....