1.迷宫图
S0
S1
S2
S3
S4
S5
S6
S7
S8
S9
Sg
2.迷宫算符:上,下,右,左
3.迷宫状态空间图:
S0
S1
右
下
右
S2
下
右
下
右
S4
S3
S5
S5
S7
上
下
右
下
右
左
S4
右
S7
S6
右
S9
S8
右
S6
S8
S2
右
右
上
下
S9
Sg
S1
S3
Sg
优化树
S0
S1
右
下
右
S2
下
右
S4
右
S3
S5
S7
下
S6
右
S8
右
右
S9
Sg
4.规则:(S5,S4).
(S5,S6).
(S5,S8). (S5,S2)
road(s0,s1).
road(s1,s2).road(s1,s4).road(s1,s0).
road(s2,s1).road(s2,s3).road(s2,s5).
road(s4,s5.road(s4,s7).road(s4,s1).
road(s3,s2).
road(s5,s4).road(s5,s6).road(s5,s8).road(s5,s2).
road(s7,s4).
road(s6,s5).road(s6,s9).
road(s8,sg).road(s8,s5).
road(s9,s6).
5.OPEN 表和 CLOSE 表
OPEN 表
节点
S0
S1
S2
S4
父节点
0=无
1=S0
2=S1
2=S1
S3
S5
S7
S6
S8
S9
Sg
3=S2
3=S2
4=S4
6=S5
6=S5
8=S8
9=S8
CLOSE 表
编号
节点
11
10
9
8
7
6
5
4
3
2
1
0
Sg
S9
S8
S6
S7
S5
S3
S4
S2
S1
S0
S0
父节点编
号
9
8
6
6
4
3
3
2
2
1
0
0=无
Mark
目标节
点
Sg
Fail-
放失败
Fail-=Fail-()
RES
求 S0->Sg 的节
点
S0
S1
S2
S5
S8
6.程序代码:
DOMAINS
state=symbol
DATABASE-mydatabase
open(state,integer)
closed(integer,state,integer)
res(state)
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)
road(state,state)
GOAL
solve.
CLAUSES
solve:-search(s0,sg),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 don't 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(No3,State):-step56(No3,State),!,fail.
step56(No4,StateX):-
rule(StateX,StateY),
not(open(StateY,_)),
not(closed(_,StateY,_)),
assertz(open(StateY,No4)),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(s0,s1).
road(s1,s2).road(s1,s4).road(s1,s0).
road(s2,s1).road(s2,s3).road(s2,s5).
road(s4,s5.road(s4,s7).road(s4,s1).
road(s3,s2).
road(s5,s4).road(s5,s6).road(s5,s8).road(s5,s2).
road(s7,s4).
road(s6,s5).road(s6,s9).
road(s8,sg).road(s8,s5).
road(s9,s6).
7.抓图结果