1:- module(detact,
2 [determine_active_dec/2,
3 determine_active_inc/2]). 4
5:- use_module(library(clpcd/domain_ops)). 6:- use_module(library(clpcd/solve)). 7
14
15determine_active_dec(CLP,[_,_|H]) :-
16 determine_active(H,CLP,-1).
17
24
25determine_active_inc(CLP,[_,_|H]) :-
26 determine_active(H,CLP,1).
27
34
35determine_active([],_,_).
36determine_active([l(X*K,_)|Xs],CLP,S) :-
37 get_attr(X,clpcd_itf,Att),
38 arg(2,Att,type(Type)),
39 determine_active(Type,CLP,X,K,S),
40 determine_active(Xs,CLP,S).
41
42determine_active(t_L(_),_,_,_,_).
43determine_active(t_Lu(_,_),_,_,_,_).
44determine_active(t_U(_),_,_,_,_).
45determine_active(t_lU(_,_),_,_,_,_).
46determine_active(t_l(L),CLP,X,_,_) :- intro_at(CLP,X,L,t_L(L)).
47determine_active(t_u(U),CLP,X,_,_) :- intro_at(CLP,X,U,t_U(U)).
48determine_active(t_lu(L,U),CLP,X,K,S) :-
49 eval_d(CLP, K*S, KS),
50 ( compare_d(CLP, >, 0, KS)
51 -> intro_at(CLP,X,L,t_Lu(L,U))
52 ; compare_d(CLP, <, 0, KS)
53 -> intro_at(CLP,X,U,t_lU(L,U))
54 )