% An encoding of the 8-queens problem using only normal rules % (c) 2007 Tomi Janhunen % % usage: lparse queens-normal.lp | smodels 0 % Domain of coordinates d(1). d(2). d(3). d(4). d(5). d(6). d(7). d(8). % Equality same(X,X) :- d(X). % Each square either has a queen or not queen(X,Y) :- not no_queen(X,Y), d(X), d(Y). no_queen(X,Y) :- not queen(X,Y), d(X), d(Y). % Rows :- queen(X,Y), queen(X2,Y), d(X), d(X2), d(Y), not eq(X,X2). row_hasq(Y) :- queen(X,Y), d(X), d(Y). :- not row_hasq(Y), d(Y). % Columns :- queen(X,Y), queen(X,Y2), d(X), d(Y), d(Y2), not eq(Y,Y2). col_hasq(X) :- queen(X,Y), d(X), d(Y). :- not col_hasq(X), d(X). % Diagonals diff(1,2,1). diff(2,3,1). diff(3,4,1). diff(4,5,1). diff(5,6,1). diff(6,7,1). diff(7,8,1). diff(1,3,2). diff(2,4,2). diff(3,5,2). diff(4,6,2). diff(5,7,2). diff(6,8,2). diff(1,4,3). diff(2,5,3). diff(3,6,3). diff(4,7,3). diff(5,8,3). diff(1,5,4). diff(2,6,4). diff(3,7,4). diff(4,8,4). diff(1,6,5). diff(2,7,5). diff(3,8,5). diff(1,7,6). diff(2,8,6). diff(1,8,7). diff(X,Y,D) :- diff(Y,X,D), d(X), d(Y), d(D). :- queen(X,Y), queen(X2,Y2), diff(X,X2,D), diff(Y,Y2,D).