添付ファイル '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は変更される可能性が高いので、利用しないでください。ファイルを添付する権限がありません。