home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / b / binprolog / !BinPro330 / progs / queens < prev    next >
Encoding:
Text File  |  1995-01-20  |  716 b   |  40 lines

  1. go:-     statistics(runtime,_), 
  2.         queens(16,L), statistics(runtime,[_,Y]), 
  3.         write(L), nl,
  4.         write('time : '), write(Y), nl.
  5.  
  6.  
  7.  
  8.  
  9. queens(N,Qs):-
  10.         range(1,N,Ns),
  11.         queens(Ns,[],Qs).
  12.  
  13.  
  14. queens([],Qs,Qs).
  15. queens(UnplacedQs,SafeQs,Qs):-
  16.         sel(UnplacedQs,UnplacedQs1,Q),
  17.         not_attack(SafeQs,Q),
  18.         queens(UnplacedQs1,[Q|SafeQs],Qs).
  19.  
  20.  
  21. not_attack(Xs,X):-not_attack(Xs,X,1).
  22.  
  23. not_attack([],_,_):-!.
  24. not_attack([Y|Ys],X,N):-
  25.         X =\= Y+N, 
  26.         X =\= Y-N,
  27.         N1 is N+1,
  28.         not_attack(Ys,X,N1).
  29.  
  30. sel([X|Xs],Xs,X).
  31. sel([Y|Ys],[Y|Zs],X):-
  32.         sel(Ys,Zs,X).
  33.  
  34. range(N,N,[N]):- !.
  35. range(M,N,[M|Ns]):-
  36.         M < N,
  37.         M1 is M+1,
  38.         range(M1,N,Ns).
  39.  
  40.