home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / progs / lq8 < prev    next >
Encoding:
Text File  |  1993-09-07  |  1.1 KB  |  41 lines

  1. make_board([l1,l2,l3,l4,l5,l6,l7,l8],[c1,c2,c3,c4,c5,c6,c7,c8]):-
  2.     lval(c1,on,[A8 -B1 ,A9 -B2 ,A10-B3 ,A11-B4 ,A12-B5 ,A13-B6 ,A14-B7 ,A15-B8 ]),
  3.     lval(c2,on,[A7 -B2 ,A8 -B3 ,A9 -B4 ,A10-B5 ,A11-B6 ,A12-B7 ,A13-B8 ,A14-B9 ]),
  4.     lval(c3,on,[A6 -B3 ,A7 -B4 ,A8 -B5 ,A9 -B6 ,A10-B7 ,A11-B8 ,A12-B9 ,A13-B10]),
  5.     lval(c4,on,[A5 -B4 ,A6 -B5 ,A7 -B6 ,A8 -B7 ,A9 -B8 ,A10-B9 ,A11-B10,A12-B11]),
  6.     lval(c5,on,[A4 -B5 ,A5 -B6 ,A6 -B7 ,A7 -B8 ,A8 -B9 ,A9 -B10,A10-B11,A11-B12]),
  7.     lval(c6,on,[A3 -B6 ,A4 -B7 ,A5 -B8 ,A6 -B9 ,A7 -B10,A8 -B11,A9 -B12,A10-B13]),
  8.     lval(c7,on,[A2 -B7 ,A3 -B8 ,A4 -B9 ,A5 -B10,A6 -B11,A7 -B12,A8 -B13,A9 -B14]),
  9.     lval(c8,on,[A1 -B8 ,A2 -B9 ,A3 -B10,A4 -B11,A5 -B12,A6 -B13,A7 -B14,A8 -B15]).
  10.  
  11. queens(LCs):-
  12.     make_board(Ls,Cs),
  13.     queens(Ls,Cs,LCs).
  14.     
  15. queens([],[],[]).
  16. queens([L|Ls],OldCs,[L-C|LCs]):-
  17.     select(C,OldCs,NewCs),
  18.     lval(C,on,Diags),
  19.     mark(Ls,L,Diags),
  20.     queens(Ls,NewCs,LCs).
  21.  
  22. select(X,[X|Xs],Xs).
  23. select(X,[Y|Xs],[Y|Ys]):-select(X,Xs,Ys).
  24.  
  25. mark([],L,[L-L|_]).
  26. mark([_|Ls],L,[_|Diags]):-mark(Ls,L,Diags).
  27.  
  28. test(T):-
  29.     statistics(runtime,_),
  30.     (
  31.         queens(Qs),
  32.         % write(Qs),nl,
  33.         fail
  34.     ;
  35.         true
  36.     ),
  37.     statistics(runtime,[_,T]).
  38.  
  39. go:-test(T),write(T),nl.
  40.  
  41.