I'm following the "7 languages in 7 weeks" book. This week, PROLOG! However, I'm failing on this task: solve the eight queens puzzle in prolog. Why does this fail:
queens(List) :- List = [Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8], valid(List). valid(). valid([Head|Tail]) :- validone(Head,Tail), valid(Tail). validone(One,[Head|]) :- pairok(One, Head). validone(One,[Head|Tail]) :- pairok(One, Head), validone(One, Tail). pairok((X1, Y1), (X2, Y2)) :- Range = [1,2,3,4,5,6,7,8], member(X1, Range), member(Y1, Range), member(X2, Range), member(Y2, Range), (X1 =\= X2), (Y1 =\= Y2), (X1+Y1 =\= X2+Y2), (X1-Y1 =\= X2-Y2).
I load it in gprolog using
then I ask it to find me the eight unknowns (A through to H) by executing this:
What it should do (I think) is suggest a set of values that the unknowns can take. What it does instead is say:
(which means it thinks there are no possible solutions.) Anyone spot my error?