1#show queen/2. 2 3#program board(n). 4#external attack(n,1..n,h). 5#external attack(1..n,n,v). 6 7target(n, X, X, n, b,n) :- X = 1..n-1. % diagonal b 8target(Y, n-1,n, Y-1,b,n) :- Y = 2..n-1. % diagonal b 9target(X, n-1,X+1,n, f,n) :- X = 1..n-1. % diagonal f 10target(n-1,Y, n, Y+1,f,n) :- Y = 1..n-2. % diagonal f 11target(X, n, X-1,n, h,n) :- X = 2..n. % horizontal 12target(n, Y, n-1,Y, h,n) :- Y = 1..n-1. % horizontal 13target(Y, X, Y, X-1,v,n) :- target(X,Y,X-1,Y,h,n). % vertical 14 15{ queen(1..n,n); queen(n,1..n-1) }. 16 17attack(X',Y',D) :- target(X,Y,X',Y',D,n), queen(X,Y). 18attack(X',Y',D) :- target(X,Y,X',Y',D,n), attack(X,Y,D). 19 20:- target(X,Y,X',Y',D,n), attack(X',Y',D), queen(X',Y'). 21 22:- not queen(1,n), not attack(1,n,h). 23:- not queen(n,1), not attack(n,1,v). 24