2
我对Prolog相当陌生,我希望这个问题没有被问及回答,但如果它有我道歉,我不能理解任何其他类似的问题和答案。序言无限循环
我的问题是,我有3个城镇,通过道路连接。大多数是单向的,但有两个城镇通过双向街道相连。即
facts:
road(a, b, 1).
road(b, a, 1).
road(b, c, 3).
其中a,b和c是城镇,数字是距离
我需要能够从镇到c去没有卡住a和b
之间得到到这里我可以用谓词解决:(其中r是城镇的路线上的列表)
route(A, B, R, N) :-
road(A, B, N),
R1 = [B],
R = [A|R1],
!.
route(A, B, R, N) :-
road(A, C, N1),
route(C, B, R1, N2),
\+ member(A, R1),
R = [A | R1],
N is N1+N2.
然而
如果我添加一个镇d像这样
facts:
road(b, d, 10)
我不能让Prolog认识到这是第二种可能的途径。我知道这是因为我使用了剪切,但没有剪切,它不会停止并以堆栈溢出结束。
此外,我将需要能够编写一个新的谓词,当R被给定为a和c之间的最短路径时返回true。
对不起有很长的描述。我希望有一个人可以帮助我!
此代码不会在路线中添加两个以上的城市。 – Danny