solution( Queens ) :- permutation( [1,2,3,4,5,6,7,8], Queens), safe( Queens ). safe( [] ). safe( [ Queen | Others ] ) :- safe( Others ), noattack( Queen, Others, 1 ). noattack( _, [], _ ). noattack( Y, [ Y1 | Yrest ], Xdist ) :- Y1-Y =\= Xdist, Y-Y1 =\= Xdist, Dist1 is Xdist + 1, noattack( Y, Yrest, Dist1 ).