序言中排列的八皇后问题

eight queen problem with permutation in prolog

我正在使用这段代码来解决八皇后问题,但我对 del 谓词有疑问。 有没有人可以帮助我了解它是如何工作的?

代码在这里:

solution(Queens):- 
  permutation([1,2,3,4,5,6,7,8],Queens), 
  safe(Queens).

permutation([],[]).    
permutation([Head|Tail],PermList):- 
 permutation(Tail,PermTail), 
 del(Head,PermList,PermTail).

del(A,[A|List],List).
del(A,[B|List],[B|List1]):- 
 del(A,List,List1).

safe([]).
safe([Queen|Others]):- 
 safe(Others), 
 noattack(Queen,Others,1).

noattack(_,[],_).
noattack(Y,[Y1|Ylist],Xdist):- 
 Y1-Y=\=Xdist,
 Y-Y1 =\= Xdist,
 Dist1 is Xdist +1, 
 noattack(Y,Ylist,Dist1).

关于del谓词,我试着在这里解释一下:Prolog: How does delete/3 works?