search.pl
solve(P) :-
start(Start),
search(Start,[Start],Q),
reverse(Q,P).
search(S,P,P) :- goal(S), !. /* done */
search(S,Visited,P) :-
next_state(S,Nxt), /* generate next state */
safe_state(Nxt), /* check safety */
no_loop(Nxt,Visited), /* check for loop */
search(Nxt,[Nxt|Visited],P). /* continue searching... */
no_loop(Nxt,Visited) :-
\+member(Nxt,Visited).
queen.pl
start([]).
goal(S) :- length(S,8).
next_state(S,[C|S]) :- member(C,[1,2,3,4,5,6,7,8]),notmember(C,S).
safe_state([C|S]) :- length(S,L),
Sum is C+L+1, Diff is C-L-1,
safe_state(S,Sum,Diff).
safe_state([],_,_) :- !.
safe_state([F|R],Sm,Df) :- length(R,L),
X is F+L+1,
X \= Sm,
Y is F-L-1,
Y \= Df,
safe_state(R,Sm,Df).
如何运行这个?我没有得到如何处理这段代码。 它是使用prolog进行迭代搜索。 搜索的概念以及如何通过图形方法在prolog中实现它。在这个实验中完成了寻找下一个状态的基本搜索的实现。