% DONALD+GERALD=ROBERT CLP(FD)
solve [D, ,H,A, L,D], [G, E,R,A,L,D], [R, 0, , E, R, ]):-
Vars =,0,N,A,L,G,E,R,B,T], % ,
domain [ Vars, 0, 9), all_dif ferent I Vars), 1000C0*D + 10000*0 + 100D00*G + 10000*E + 100000*R + 10000*0 + labeling £ [], Vars). |
% % |
- -
1000*N + 100*A + 10*L + D + 1000*R + 100*A + 10*L + D # = 1000*B + 1D0*E + 10*R + T,
14.5 CLP(FD) . , ( , ) : , . CLP(FD),
II. Prolog
14,5. CLP(FO)
% CLP(FD)
solution Ys);- % Ys - Y
Ys = [_,_,_,_, _ _,_,_], * 8
domain (Ys, 1, ), % 1..8
all dif ferent! Ys), % - ,
%
safe! Ys), % ,
%
labeling! [J, Ys). I Ys
safe ) ■
safe! [Y | Ys]):-
no attack (Y, Ys, 1), 4 1 - Y
% Ys
safet Ys).
% no_attack(Y, Ys, D):
% , Y,
h Ys;
I D -
no_attack(Y, [],_).
no_attack(Yl, [Y2 | Ys], D):-D #\= Y1-Y2, D #\=Y2-Yl, Dl is D+l, no_attack(Yl, Ys, Dl).
, CLP(FD) , . CLP(FD): minimize! Goal, X) maximize; Goal, X)
Goal, () X. , Goal - indomain , , .
?- in 1..20, V # = X*(20-), maximize (indomain (X), V), X = 1 0, V = 100
(. . 14.1) :
?.- StartTimes = [, , , Td,Tf ], % Tf - domain< StartTimes, 0, 20), #>= 0,
+ 2#=<, %
+ 2#=<, %
+ 3 #=< Td, % b d
+ 5#=<Tf, % Tf
Td + 4 #=< Tf,
minimize! labeling([ ], StartTiraes], Tf).
StartTimes = [0,2,2,5,9]
.
14.