level 1
wt6911
楼主
DOMAINS state=symbolDATABASE-mydatabase open(state,integer) closed(integer,state,integer) res(state) open1(state,integer) min(state,integer) mark(state) fail_PREDICATES solve search(state,state) result searching step4(integer,state) step56(integer,state) equal(state,state) repeat resulting(integer) rule(state,state)GOAL solve.CLAUSES solve:-search(a,e),result.search(Begin,End):- retractall(_,mydatabase), assert(closed(0,Begin,0)), assert(open(Begin,0)), assert(mark(End)), repeat, searching,!.result:- not(fail_), retract(closed(0,_,0)), closed(M,_,_), resulting(M),!. result:-beep,write("sorry do not find a road!").searching:- open(State,Pointer), retract(open(State,Pointer)), closed(No, _, _),No2=No+1, asserta(closed(No2,State,pointer)), !,step4(No2,State).searching:-assert(fail_).
step4(_,State):-mark(End),equal(State,End).step4(No,State):-step56(No,State),!,fail.step56(No,StateX):- rule(StateX,StateY), not(open(StateY,_)), not(closed(_,StateY,_)), assertz(open(StateY,No)), fail.step56(_,_):-!.equal(X,X).repeat.repeat:-repeat.resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).resulting(_):-res(X),write(X),nl,fail.resulting(_):-!.rule(X,Y):-road(X,Y).road(a,b). road(a,c). road(b,f). road(f,g). road(f,ff). road(g,h).road(g,i). road(b,d). road(c,d). road(d,e). road(e,b).
2013年06月08日 09点06分
1
step4(_,State):-mark(End),equal(State,End).step4(No,State):-step56(No,State),!,fail.step56(No,StateX):- rule(StateX,StateY), not(open(StateY,_)), not(closed(_,StateY,_)), assertz(open(StateY,No)), fail.step56(_,_):-!.equal(X,X).repeat.repeat:-repeat.resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).resulting(_):-res(X),write(X),nl,fail.resulting(_):-!.rule(X,Y):-road(X,Y).road(a,b). road(a,c). road(b,f). road(f,g). road(f,ff). road(g,h).road(g,i). road(b,d). road(c,d). road(d,e). road(e,b).
