序言中排列的八皇后问题
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?
我正在使用这段代码来解决八皇后问题,但我对 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?