2014-11-24 30 views
-2

我需要帮助来解决迷宫路径。由于事先入口和出口之间的所有可能路线

link(a,b). 
link(b,c). 
link(c,d). 
link(f,c). 
link(b,e). 
link(d,e). 
link(e,f). 

写谓词定义基于以下事实:任何两个相邻点(X和Y例如)之间的路线为存在覆盖该更一般的情况下它们并递归谓词之间的链路通过确定在X和迷宫中的第三点(如Y)之间存在关联以及在Y和Z之间存在关联的事实,来确定任意两个非相邻点(例如X和Z)之间的路线。

两个特别房间 - 一个连接到“a”并称为“Entry”,另一个连接到“f”并称为“退出”。添加一组事实来反映两个新房间。使用任务1中的谓词,编写一个谓词,用于查找入口和出口之间的所有可能路径,并创建被访问房间的列表。编写另一个谓词,在每次迭代结束时在交互式控制台中显示列表,换句话说,每次达到Exit时都会显示该列表。编写一份测试计划,显示您的预期结果和实际结果。评估此解决方案并确定可能导致其发生的任何潜在问题和情况。

这个解决方案的问题是循环。如果我想链接(a,f)prolog说不。我的谓词有任何问题。

| ? - 链接(a,b)。 链接(b,c)。 链接(c,d)。 链接(f,c)。 链接(b,e)。 链接(d,e)。 链接(e,f)。

route(X,Y): - link(X,Y)。路线(X,Y): - 路线(X,Z),路线(Z,Y)。 是

! ---------------------------------------- !错误20:谓词未定义 !目标:路线(_31102,_31104): - 链接(_31102,_31104)

中止 | ? - 链接(a,f)。 否

| ? - 路线(X,Y)。 X = a, Y = b;

X = b, Y = c;

X = c, Y = d;

X = f, Y = c;

X = b, Y = e;

X = d, Y = e;

X = e, Y = f;

X = a, Y = c;

X = a, Y = e;

X = A, Y = d

;

X = A, Y = d

| ? - 链接(X,Z)。 X = a, Z = b

| ? - | ? - 链接(X,Z)。 X = a, Z = b;

X = b, Z = c;

X = c, Z = d;

X = f, Z = c;

X = b, Z = e;

X = d, Z = e;

X = E, Z =˚F

+2

你应该更好地解释什么,你问一个问题,这个网站上受审。没有人会为你做功课,但许多人已经准备好帮助你理解你没有的技术要点。不要发布你必须做的练习,希望有人会为你做... – Antwane 2014-11-24 21:53:04

+0

阅读[旅游](http://stackoverflow.com/tour)了解本网站。 – false 2014-11-24 23:40:02

回答

1
connected_to(A,B) :- 
    closure0(link, A,B). 

closure0/3的定义见this question

或者,要使用新的名称:

route(A0,A) :- 
    link(A0,A1), 
    closure0(link, A1,A).