welcome: please sign in
location: Prologの添付ファイル:nqueen.pl

添付ファイル 'nqueen.pl'

ダウンロード

   1 /*
   2   N-Queen
   3   Programed by M.Tanaka
   4   Date-Written 1989.4.23
   5 
   6   input:  generate(N).
   7   output: main :- queen(1,Board),...,write(Board).
   8           queen(Q,[x,Q,x,x,
   9                    x,x,x,_,
  10                    _,x,_,x,
  11                    _,x,_,_]).
  12           queen(...).
  13           ...
  14 */
  15 
  16 generate(N) :-
  17         gen_main(N),
  18         gen_queen(N).
  19 
  20 gen_main(N) :-
  21         write('main :- '),
  22         nl,
  23         for(1,N,X),
  24                 write('    queen('),
  25                 write(X),
  26                 write(',Board),'),
  27                 nl,
  28         fail.
  29 gen_main(_) :-
  30         write('    write(Board).'),
  31         nl.
  32 
  33 gen_queen(N) :-
  34         for(1,N,X),
  35             for(1,N,Y),
  36                 gen_list(X,Y,N,1,1,List),
  37                 write('queen(Q,'),
  38                 write(List),
  39                 write(').'),
  40                 nl,
  41         fail.
  42 gen_queen(_).
  43 
  44 gen_list(_,_,N,N1,1,[]) :- N1 is N+1, !.
  45 gen_list(X,Y,N,I,N1,List) :- N1 is N+1, !,
  46         I1 is I+1,
  47         gen_list(X,Y,N,I1,1,List).
  48 gen_list(X,Y,N,X,Y,['Q'|List]) :- !,
  49         Y1 is Y+1,
  50         gen_list(X,Y,N,X,Y1,List).
  51 gen_list(X,Y,N,X,J,['x'|List]) :- !,
  52         J1 is J+1,
  53         gen_list(X,Y,N,X,J1,List).
  54 gen_list(X,Y,N,I,Y,['x'|List]) :- !,
  55         Y1 is Y+1,
  56         gen_list(X,Y,N,I,Y1,List).
  57 gen_list(X,Y,N,I,J,['x'|List]) :- X is I+J-Y, !,
  58         J1 is J+1,
  59         gen_list(X,Y,N,I,J1,List).
  60 gen_list(X,Y,N,I,J,['x'|List]) :- X is I-J+Y, !,
  61         J1 is J+1,
  62         gen_list(X,Y,N,I,J1,List).
  63 gen_list(X,Y,N,I,J,['_'|List]) :- !,
  64         J1 is J+1,
  65         gen_list(X,Y,N,I,J1,List).
  66 
  67 for(I,I,I) :- !.
  68 for(I,J,I).
  69 for(I,J,K) :- I1 is I+1, for(I1,J,K).
  70 

添付ファイル

添付ファイルを参照するには、(下のファイル一覧にあるように)attachment:filenameと記述します。 [get]リンクのURLは変更される可能性が高いので、利用しないでください。
 All files | Selected Files: delete move to page copy to page

ファイルを添付する権限がありません。