Prolog 入口和出口之间的所有可能路线

Prolog 入口和出口之间的所有可能路线,prolog,maze,transitive-closure,Prolog,Maze,Transitive Closure,我需要帮助解决迷宫路径。提前谢谢 link(a,b). link(b,c). link(c,d). link(f,c). link(b,e). link(d,e). link(e,f). 编写一个谓词,定义任意两个相邻点(例如X和Y)之间的路由,前提是它们之间存在链接,递归谓词涵盖任意两个非相邻点(例如X和Z)之间路由的更一般情况通过确定X和迷宫中第三个点(比如Y)之间存在连接,以及Y和Z之间存在路径这一事实 两个特殊房间——一个连接到“a”并称为“入口”,另一个连接到“f”并称为“

我需要帮助解决迷宫路径。提前谢谢

link(a,b).
link(b,c). 
link(c,d). 
link(f,c).
link(b,e). 
link(d,e). 
link(e,f). 
编写一个谓词,定义任意两个相邻点(例如X和Y)之间的路由,前提是它们之间存在链接,递归谓词涵盖任意两个非相邻点(例如X和Z)之间路由的更一般情况通过确定X和迷宫中第三个点(比如Y)之间存在连接,以及Y和Z之间存在路径这一事实

两个特殊房间——一个连接到“a”并称为“入口”,另一个连接到“f”并称为“出口”。添加一组事实以反映两个新房间。使用任务1中的谓词,编写一个谓词,查找入口和出口之间的所有可能路线,并创建已访问房间的列表。编写另一个谓词,在每次迭代结束时或每次到达出口时在交互控制台中显示列表。写一个测试计划,显示你的预期结果和实际结果。评估此解决方案并确定任何潜在问题以及可能导致其发生的情况

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

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

路由(X,Y):-链路(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

有关
closure0/3
的定义,请参阅

或者,要使用您的新名称:

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

在这个网站上提问之前,你应该更好地解释你尝试了什么。没有人会帮你做家庭作业,但很多人都愿意帮助你理解一些你不知道的技术要点。不要张贴你必须做的练习,希望有人能帮你做…通过阅读了解这个网站。
route(A0,A) :-
    link(A0,A1),
    closure0(link, A1,A).