使用Prolog进行迭代搜索

时间:2017-09-05 18:15:33

标签: search prolog iteration

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中实现它。在这个实验中完成了寻找下一个状态的基本搜索的实现。

0 个答案:

没有答案