		/* EqL program for n queens problem */

queens(n) => solve(1, [], n).

solve(col, safelist, n) => if eq(col,n+1) then safelist 
           		    else place([col | row(n)], safelist, n).

place(q, safelist, n) => solve(col+1, [q|safelist], n)
			where q = [col|row];
			      safe(safelist, q) = true.

safe([],q) => true.
safe([q1 | t], q)  => safe(t,q) where threatened(q, q1) = false.

threatened([c1|r1], [c2|r2]) => eq(r1,r2) or eq(abs(r1-r2), abs(c1-c2)). 

row(n) => n        where n>0 = true.
row(n) => row(n-1) where n>0 = true.
